OK, your code isn't allowing for multiple PrintJobEvents - remember that the NoMoreEvents notification should always be sent when the print service finishes a job. Your listener code effectively returns only the last event it receives, because the printJobStatus variable is overwritten by every event that arrives, so you're always going to see NoMoreEvents because that's always the last event. Try sending the printJobStatus to the console in every PrintJobEvent handler method to see what events are sent. You could use a list to hold the events received for a job, instead of a single printJobStatus variable.
However, it's possible (but unlikely) that the print service is at fault. The API docs say that the 'NoMoreEvents' notification is always sent:
"
Not all print services may be capable of delivering interesting events, or even telling when a job is complete. This message indicates the print job has no further information or communication with the print service. This message should always be delivered if a terminal event (completed/failed/canceled) is not delivered. For example, if messages such as JOB_COMPLETE have NOT been received before receiving this message, the only inference that should be drawn is that the print service does not support delivering such an event".