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 );
    }
};
			



