Seriously, in STL, this has happened to me too many times to count.
On this topic, one very interesting thing as I prep for a presentation tonight is could it be the garbage collector firing off causing my timing issues?
If it is, I can do this and it should magically fix it:
GCLatencyMode mode = GCSettings.LatencyMode;
// entering time-critical phase
GCSettings.LatencyMode = GCLatencyMode.LowLatency;
// work work work work and some more work
work();
// restore and play
GCSettings.LatencyMode = mode;