failureCleanup() in BspServiceMaster gets called with a null exception from failJob(). That in turn passes a null exception to the set of MasterObservers, in their applicationFailed() method. They probably aren't expecting that. Instead we should pass an appropriate exception around depending on the cause of the failure.
I'll attach a patch.