Also, Serial.println() will eventually block, if you feed data too fast.
I think printing two 4-char numbers with linefeeds and start/stop bits and all that, at 115200bps, is running in the 870 microsecs range. That could be a source of timing skew.
If cycletime ever exceeds 1,000, then the idletime calculation gives you a negative idle time, which delayMicroseconds(unsigned int) treats as a large positive value. This yeilds actual cycle times in the 65,000 range. But because you're doing a long calculation and discarding the high bits, you are printing the actual cycle times MODULO 65536. These are the +/- 8,000 figures.
Make idletime and cycletime long integers and do this, and see if it helps: