It tries to use the same timescale for everything but if it won't fit it will use whatever matches the original double up to 8 decimal places. But that didn't affect this particular example because the proposed timescale was 24000 and it was able to fit 1.24 exactly within that.
That's not the issue though. My calculations are correct for the value I am receiving, which is 1.24. The problem is that FCPX says 1.24 is wrong and it's actually 1.2399888889. I could certainly calculate that value and put it in the XML file but I don't know that value exists because I don't get that from QT or AVF.
FCPX, Premiere and CinePlay all say the file is 30 frames long. When viewing the file in QT Player 7 with the timecode mode set to Frames, it strangely says it is -10 frames long.
But now I do the calculations, 30 frames at 24*(1000/1001) would be 1.25125 seconds, so no-one's getting it right. Maybe the file is corrupt.