Well, I did not "discovered" so much...
And I think I'd better not to feed the troll again about performance timing and profiling under Windows...
AFAIK, performance counters under Windows have 2 well-known problems :
* Too great leaps between 2 calls to QueryPerformanceCounter() (seems to be on every platforms, example here). Here is the MSDN KB article about it.
* The side effect I described due to the fact that each core has its own clock (so the problem occurs only on multi-core platforms, example here)
For clarity, here is "your" implementation (and basically the same as my old one) :
return (double)currentTime / (double)frequency;
Now, the most-common-and-recommended-trick :
There is an example implementation in OGRE 3D (Timer::getMilliseconds method at line 119).
As you can see, this is awful, but during my googling trip about this problem, I found nothing better for performance timing.
Maybe someone here use an another trick ?