I don't believe this is possible:
The GameTime object received by Draw
and Update isn't technically owned by
anyone, but is instead re-created each
Game.Tick and passed to Update and
Draw from there.
Internally, Tick fills the value of
the Total/ElapsedRealTime properties
based off of the current high
performance counter value as reported
by Stopwatch.GetTimestamp(). If the
PC the program is running on does not
have a high performance counter, then
it returns DateTime.Now.Ticks.
The Game Time properties (as opposed
to real-time) also use the
Stopwatch.GetTimestamp, however
elapsed time since application launch
and last frame are computed internally
and then filled in before GameTime is
passed to Draw or Update - so there's
no external way to compute those
values directly.
Source: http://forums.create.msdn.com/forums/t/10587.aspx, bold mine. Also included there are several work arounds, similar to what you've already outlined though.