This is normal for a VI running on a multipurpose OS. There are other things running, fighting for CPU.
You will get better results using a timed loop. It is designed to keep time much better and also notifies you if the timing is off.
In addition, you should use "wait next ms multiple" so the timing errors don't accumulate (you might need to discard the first time because it will be random, or add another wait before the loop).
Lets' assume your loop contains code that takes 40ms to execute. With "wait next ms multiple", the loop with run roughly every 100ms. With a plain wait(ms) the loop can take anywhere between 100 and 140ms, depending on the order things execute.
Another analogy:
"Wait next ms multiple": Do something.every time the minute hand on the clock is at 12.
"Wait(ms): .... do something, wait one hour. do something, wait one hour, .... (the repetition depends on the time to complete the task).
(If your timing needs to be perfect, you need to use LabVIEW RT)