If there was a spy utility, it would have to hook into the CLR itself
(and probablys low down your app in the process, as it would use the
debugging hooks, most likely) to find when events are fired. AFAIK, there
isn't any such thing.
There might be solutions which work by requiring you to place code in
the event firing sites, but I doublt that is what you are looking for.
When calling the Show method on a Form, the Shown event will be fired if
it is the first time the form is shown. The VisibleChanged event can be
fired if the form is hidden as well. The Activate event can also be fired
as well, I believe.