Without knowing the ins-and-outs of WCF, this does sound like a message size limitation. How large are the objects you are passing when they are on the wire? This can be a hard question to answer and you may have to guess.
Given that your message size limit is set to 2147483647, and your system breaks after 620 items in the list, are your items larger than 2147483647/620 = 3463683 bytes? If so, then you may not be able to use this method to transfer them all in one go and you may need to page the data or think of a completely new tactic to retrieve them.