Stepper motor works as expected high rpm but not low
One of the issues with stepper motors is that when driving light loads the motor will oscillate around the next step potion. That is, it will overshoot the target step, turn around and be driven back past the target, repeating till it settles.

Unfortunately, when that oscillation is in the same frequency range as your step pulses it can cause unforeseen things to happen, including the motor backing up a cycle unexpectedly. 

That instability can be alleviated by micro-stepping the motor such that the positional torque being applied to the motor is much closer to the target angular position which results in the motor oscillation being reduced to manageable levels.

Alternatively, it is common when using steppers for both positional and cruise operation to attach a shaft encoder with as many pulses as the motor has steps per rev and use that to turn the thing into a brushless DC motor.