Look at the spindle config tab (Configure->Mach, then click on the "Spindle" tab). What are your "MaxRPM", "Accel Time" and "Decel Time" values set to (on the top line, labeled "0")? Do you have some Lua code and screen button that changes the spindle range? Better yet, can you post your Machine.INI file (or even a "profile package").
FYI - If the "Accel Time" is non-zero, Mach4 calculates how long to delay after an M3 or S command by something like this:
delay = ((NewSpeed - OldSpeed)/MaxRPM) * AccelTime (or DecelTime, as appropriate).
So, for example, if your MaxRPM = 10000 and Accel Time is 5 seconds, your "M3 S2000" command will delay ((2000 - 0) / 10000) * 5 = 1 second.
Bob