Sleep()の場合、むしろタイムスライスの関係で最短16msで復帰するのが仕様です。プロセスのスケジューリングに依存しますので、精度を期待してはいけません。1msで戻ってきていたとしたら、別のアプリケーションでtimeBeginPeriod()が実行されていた可能性が高いです。
システムのカレンダ時計が狂ったり、システムの負荷が上がったりすることを厭わないのであれば、timeBeginPeriod()で精度を調整することも可能ですが、Windows のOSにとって非常に行儀が悪いアプリケーションになります。
精度が重要であるなら、Multimedia Timerを使うことになります。
GUIによる画面の更新による精度低下が気になるようなら、CreateThreadpoolTimer()/SetThreadpoolTimer()/WaitForThreadpoolTimerCallbacks()/CloseThreadpoolWork()あたりを使うことを検討してもいいでしょう。
タイマ精度に関しては、Microsoft社から出ている "Timers, Timer Resolution, and Development of Efficient Code"(docx) が詳しいです。
詳しい議論をしたいならMSDN Forumの方に移動してください。