EntityFieldQuery doesn't work correctly in hook_cron
I have also encountered this kind of issue that running EntityFieldQuery does not work sometimes in the cron job. 

It turns out that EntityFieldQuery will run access check. 

Cron job is run as anonymous user role and it cannot access to order_status node.

To work around this issue you can add tag DANGEROUS_ACCESS_CHECK_OPT_OUT to bypass node access.

Here is the example:

$query-&gt;entityCondition('entity_type', 'node')
    -&gt;propertyCondition('type', array('order_status'))
    -&gt;propertyCondition('status', 1);
    -&gt;addTag('DANGEROUS_ACCESS_CHECK_OPT_OUT');
$result = $query-&gt;execute();