The implementation of WorkflowJob.getSCMs() is troublesome. It uses the latest completed build to determine the SCM resource. Normally this works fine, however, if the last completed build has failed before all SCM resources was checked out, then none or not all SCM resources are returned. This is quite common for us since we, from time to time, have network problems and the SCM checkout step fails.
So, I therefor suggest that getSCMs() first check if getLastSuccessfulBuild() returns a build, if not fall back by using getLastCompletedBuild().
This behaviour is also more inline with WorkflowJob.poll() where it first check for a successful build.