Try to sleep less than 1000us, because the sleep(X) means it will sleep at least X us, not less, not equal.
More info here: https://cwiki.apache.org/confluence/display/NUTTX/Short+Time+Delays
Many timers are based on on one-shot watchdog timers. Basing any periodic timer on a one-shot timers is an inherently bad design. Both because of (1) inaccuracies introduced waiting for execution priority and restarting the one shot, and (2) because of the different requirements of one shot timers and periodic timers: One shot timers need to wait at least as long as requested as Alan mentioned. Periodic timers need to be as close to the frequency of the requested timer. You really can't do both with the same time.
This problems basically do go away if you can increase the resolution of the timer as you have done. But if the accuracy that you want is close to the quantization error due to the timer resolution, then it is tricky to get the timers to behave in a satisfactory way.
Most people I have talked to in the past to who needed high resolution sampling frequencies ended up using a peripheral timer running at a relatively high frequency and automatically restarting to provide periodicity