Paul,
There is a requirement for integer*8 variables to solve this as the count_rate in some processors is > 2^31, ie -ve. On my 3ghz P4 the count_rate was 3ghz. system_clock should be changed to detect when count_rate is not a good value.
You can work around the problem by recognising the time step is going backwards and calculate the -ve factor to apply to the time coming out of SYSTEM_CLOCK. I did and it worked fine for that pc only.
My solution is to use an alternative routine. I use :-
! ELAPSED TIME CALLS
! fastest gettickcount winapi
! accurate QueryPerform winapi
!
! CPU TIME CALLS
! fastest cpu_clock@ salford
! accurate cpu_clock@ salford
John