https://bugs.winehq.org/show_bug.cgi?id=32316
--- Comment #22 from Esme Povirk madewokherd@gmail.com --- Taking a fresh look at this; there's a lot here and I've been having trouble finding the important parts.
So, it sounds like the problem isn't necessarily which codepath we take, or really the optimization. The problem is that the optimized codepath in EventInfo.AddEventHandler doesn't wrap exceptions as an actual Invoke would.
RuntimePropertyInfo.GetValue appears to be a similar situation, where they have the same sort of optimization, with a try/catch to wrap exceptions. So presumably we can fix this upstream in a similar way.