When using the 2D UI event mode I found a bug where widgets inside a clipped panel had their events filtered out by the IsVisible check on the clipped panel. It was using the raycast world pos, which was 0,0,0 for some reason.
I changed line 742 of UICamera.cs from
if (IsVisible(ref mHits.buffer[b]))
to
if (IsVisible(lastWorldPosition, mHits[b].go))
and that fixed it.
EDIT: In fact, I'm encountering a lot of other issues with 2D colliders. One is that below a certain size the collider no longer gets hit by raycasts (I assume there is some minimum size that Unity is disabling the collider at)