Enquanto esta implementação não se torna a padrão do AngularJS, segue abaixo o código a ser usado para ter um $apply seguro para ser usado em qualquer parte do código.
$scope.safeApply = function(fn) { var phase = this.$root.$$phase; if( phase == '$apply' || phase == '$digest' ){ if( fn && ( typeof( fn ) == 'function' ) ){ fn(); } } else { this.$apply( fn ); } };