pofigizm
Есть конечно один вариант с помощью таймера:
// ...
        link: function (scope, element) {
          setTimeout(function () {
            var html = '';
            angular.forEach(scope.orders, function (ord) {
              html += '<h4>' + ord.name + '</h4>';
            });
            element.append($compile(html)(scope));
            console.log('end of directive');
          }, 1000);
        }
// ...

Также можно внутри таймера проверять если данные пришли то выполнять, если нет то еще подождать.
Может быть есть более изящное решение?

++ еще через 1 час...

Нашел вариант который меня в принципе устраивает:
// ...
  .directive('orderDrct', ['$compile', 'Order',
    function ($compile, Order) {
      return {
        restrict: 'A',
        link: function (scope, element) {
          Order.query({id: 'all'}, function(orders) {
            scope.orders = orders;
            var html = '';
            angular.forEach(scope.orders, function (ord) {
              html += '<h4>' + ord.name + '</h4>';
            });
            element.append($compile(html)(scope));
          });
        }
      };
    }
  ])
// ...


т.е. перенести запрос к серверу в функцию линковки и в его коллбеке уже выполнить код.

Есть еще варианты?
pofigizm
Есть директива ng-Focus которая может вызвать таймер или еще чего-нибудь.
К сожалению нету события потери фокуса, поэтому тоже велосипед.
pofigizm Решение
На stackoverflow.com ткнули носом на то место в доках где это указанно:

Методы принимают следующие параметры:

HTTP GET "class" actions: Resource.action([parameters], [success], [error])
non-GET "class" actions: Resource.action([parameters], postData, [success], [error])
non-GET instance actions: instance.$action([parameters], [success], [error])

Success вызывается с (value, responseHeaders) аргументами.
Error вызывается с (httpResponse) аргументом.