I was looking into this yesterday when I had a similar problem. If you open the published source code Timer.cs
] and scroll down to the MyTimerCallback method you'll see that the event invocation has an empty catch block.
Although I had never noticed it before, the behaviour is documented Elapsed Event
] (see the remarks section). I wonder if the comment about this behaviour being "subject to change in later versions of the framework" is a get out in case they ever want to fix their mistake!