How about we run this using `scope.$evalAsync`? This will guarantee that the handler is called from within a $digest cycle.

We should then expect anyone else who is manually triggering this event to ensure that they are inside a $digest cycle themselves.