Thanks for the suggestion. Tried it out and unfortunately it didn't work. I suspect its in the order that the END blocks are called, as $? didn't appear to have been set yet.
Comment on Re^2: Getting test status with Test::More
"Inside an END code block, $? contains the value that the program is going to pass to exit(). You can modify $? to change the exit value of the program. Beware of changing $? by accident (e.g. by running something via system)."