A task could run for many orders. Each order will cause a process represented by spooler_process_before, spooler_process (one ore more times) and spooler_process_after.
The object spooler_task.order available in spooler_process_after points to the order instance currently processed by the task.
It is NOT available in spooler_task_after, because no order is running for the current task anymore.
It does not matter if you run a shell or an API job - this behaviour is the same.