I would suspect that there's something in the code for page objects that means that it always returning the first element,
And, to me, it does look like rather convoluted way just to get the nth element in a list ... I presume it's difficult to debug if you can't find what's going wrong?
I've never found that predefining page elements works well when they aren't simple and statically defined.
Wouldn't it be easier just to just write a single method in your page class that takes an index and runs find elements by xpath to find the instance that you want?
PS. Isn't there a missing closing ']' in each of your xpaths?, e.g: