Hi Bscout,
I took a look at your code, and the first thing that occurs to me is that there is no target loop phase offset. You need this to mitigate errors caused by real-time jitter. You should take a look at (and run if you get a chance) the example code StepperGeneration. In the realtime code associated with that project, the start of the Target Loop is offset by ((Host Loop Rate / 2) + RT response time).
Because your code lacks this, it is likely that RT jitter is causing the loop rate to appear to be inaccurate.
Let me know if this helps!
Regards,
Brandon M.
Applications Engineer
National Instruments