USB Strange behavior
You need to check your physical layer for compliance to USB electricals. Usually this type of "unstable" behavior is due to frequency of one USB partner deviating more than USB allows (+-2000 ppm for FS and +-500 ppm for HS, plus some headroom). 

The issue is that all enumeration packets are relatively small, and there is not enough time for receiver to accumulate significant difference in edges, so enumeration kind-of works. Yet on longer packets the error creeps in, and hits CRC, and transmission fails. 

If USB transmits everything without errors but your data mismatch occurs at internal buffer level, you need to check your transport protocol level software.