All methods of System.Data.SqlClient.SqlCommand which call SqlStatistics.StartTimer() go like this:
SqlStatistics statistics = null;
try {
statistics = SqlStatistics.StartTimer(Statistics);
doSomethingUseful();
} finally {
SqlStatistics.StopTimer(statistics);
}
but SqlCommand.Prepare() does not follow that pattern - it contains StopTimer() call outside finally so StopTimer() is not guaranteed to run should useful code throw an exception.