Actually its not so bad. Turns out there is a variable in the evolution shell object which you can set and it will tell evolution that its not ok to quit. This can be done from within the plugin. I've got a preliminary version working now and its about a clean a solution as you could hope for. Heres what happens.
1. When evolution gets a close window command it sends out an event
2. The plugin minimizes the window and hides and tells evolution that it is not prepared to quit.
3. When the user clicks on evolution in the indicator applet it presents the window (making it visible if necessary)
Aside: The only way to quit evolution is to use Ctrl-Q or the quit evolution command.
Its actually only 10-15 lines of new code, but its spread across 3 files and 2 packages so I'm not quite sure how to upload a patch.