There are a couple of things I wanted to say about this issue. First, I don't see why you would want the if(HPTIMEREXISTS)...else... at the top of each game loop. Wouldn't you want to arange the code so this test is only done one at startup? For our in-house code we simply look for the timer and if none exists we post a message ans quit the program (but of corse this wouldn't be good for released code, except we've NEVER had that message, EVER).
Second, why do you think that is high overhead? The way you've set up your loop...your getting the counter ONE each cycle through...and TESTING it inside the loop i assume MANY times...the relitive cost of using HP timers is small compared to the many tests against the returned value. although to keep the INTERNAL code efficient, you should probably convert one of the two functions returns to a format like the other (to prevent users from needing to use the if/else pair).
Finnally, I realize this type of game loop is common, but with WINDOWS (message bsed) and High Performance timers...WHY? The whole point of these timers is to TIME things...to make them run when they are supposed to...instead of AS FAST AS POSSIBLE.... so why run a game loop...AS FAST AS POSSIBLE...polling the time and testing it all over the place for each movement. How about an EVENT DRIVEN system. Our DirectX gambling game (800x600x16bpp running 60FPS) uses the HP TIMER tests in the WinMain function (chaning the layout of the message loop to include it). See, every few times throught the message loop (few can be every one, or every 10) or EVERY time when there is NO message waiting - we call a function to test the high peformance timers we've set up. The function gets the performance count, then tests each timer we've set up, if they are triggered, we post the associated message, and reset the timers time (to the current time). This way...we KNOW that the Move() function is called exactly 100 times a second, and the UpdateDisplay() function is called 60 times a second, etc etc etc...and these do not affect each other (unless they lag of course). But even in lag situations, this system allows you to CHOOSE recovery behavior and implement it in ONE location...do you want to DROP FRAMES???? do you want the computer to KEEP posting message and hope it doesn't crash???? do you want to turn the WHOLE thing off (all timers to keep it in comparitive sync) until the message queue is empty? these are easy in such a system....
well...i might write a gamedev article about this topic...but...until then....GOOD LUCK