timeGetTimeは1000msじゃなくて1msか。
今は>>58の方法に戻して保存しちゃったからソース残ってないんだけど、
自分はこんな感じで書いたからSleepの精度は関係ないと思う(自信無いけど

const double FRAME_RATE = 60.0;
double gameTime = 0.0;
double gameDeltaTime = 1.0 / FRAME_RATE;
double currentTime;

do{ //ゲームループ
do{ // VSyncに同期しない場合、ループで待機
if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE)){
TranslateMessage(&msg); DispatchMessage(&msg);
}
currentTime = t.elapsed();
}while(gameTime > currentTime);

gameTime += gameDeltaTime;

Update();
Draw();
}while(1);