The code that converts Ticks to Milliseconds appear incorrect to me:
method StopWatch.getElapsed(Milliseconds : Boolean): Int64;
begin
if fIsRunning then
result := DateTime.UtcNow.Ticks - fStartTicks
else
result := fEndTicks - fStartTicks;
if Milliseconds and (result > 0) then
result := result / 1000; // <----- should be result/10000
end;