I'm not able to consistently see it hang on 220-compaction-daemon.t unless I disable the sleep, in which case it hangs at arbitrary places as we've seen.
I looked at escript.erl a bit, comparing R15B to R14, and there have been no changes. If you look at my_halt(Reason)  you can see where it could get into an infinite loop, and it's not clear to me what status code the script returns when an error is thrown. Anyway in all our cases I'm seeing it return 0 as expected so the next culprit might be Prove.
I notice also on this MBA that if I up the receive timeout in my_halt to 100ms or so, everything runs fine with no hangs. I not sure why they use `receive after 1 -> ok end,` and `erlang:yield()` in the same function, given what the documentation says about the diff between the two.
Some more eyeballs might be helpful. I'll poke at this some more tomorrow if I have time. My religion forbids me to touch Perl on Sunday.