It could be an XPath issue. It all depends on where you are starting from. For example if your current position is my:group5, then you don't need the ".." and would use the XPath count(preceding-sibling::my:group5), however, if you are on a child node of my:group5, then you would need the "..".
Once the XPath is correct, the count should return a valid value. Keep in mind that preceding-sibling doesn't account for the current node, so the returned count will be one less (i.e. if there's only 1 row, the count will be 0, if there are 2 rows, the count for the second row will be 1, and the first row will be 0).
I understood that you wanted to always show the field if there was more than 1 row present (i.e. even show it in the first row). If that were the case then count() makes more sense, because you can go to the container node and count how many my:group5 fields there are total. So if you are currently at my:group5, you would use: count(../my:group5) > 1 as the condition.
However, now it sounds like you never want to show the field for the first row, but always thereafter. In that case you can use position() > 1 to determine when to show it... or if you want to get more complicated, you can just use preceding-sibling::my:group5 as a boolean condition because the first row will always report false and every row thereafter will report true.
Hope that helps.