I'm afraid the best way to find the reason is probably what I said in the thread above. Every frame, dump a textual representation of the world into a file, then do two runs like that, running until you visually see a difference between them as they are running. Compare the files for the two runs with a diff tool (the tortoise svn tool on Windows is great for this) to see what the first variable to differ was.
An important point to note here is that dumping human readable floating point values (eg. 17.46678) will not be good enough to catch a very tiny difference between two floats because this representation can get rounded for printing. In C you can do this to print the hex representation of a 32-bit float, which will catch even one bit of difference between two floats. In Java... ymmv.
Code:
printf("%08X", *((int*)(&myfloat)) );