Wait a second I'm a bit confused, the code you have times the DoLotsOfWork function, not the elapsed time between the call of the function.
It times the loop. You need to stare at the flow of code until you see this. The code you have posted until now indicates that you are having a very hard time understanding how updating certain values at certain points cause certain things to be timed. Hodgman has already pointed out that anything happening at the very bottom of the loop is exactly logically the same as it happening at the top of the loop. Moving the last line of code from the bottom of the loop to the top of the loop still means that all the same statements are executed in all the same orders.
otherwise I'm just timing how long my raster operations take.
You would need GPU timers to time those. This is something you can learn later, but just as a head's up now, timing a call to a render only times how long the CPU takes to put a command into a buffer to be executed later by the GPU.
But the code you have doesn't time any of that, why?
There is a single update of the time in the loop, thus he is timing the loop. Anything not being timed is because it is not in the loop.
L. Spiro