Ah - I figured it out.
The abort_on_exception send, obviously, an abort. The thread is irrelevant, our rescue won't see a basic abort either:
begin
abort
puts "This doesn't execute"
rescue => e
puts "This also doesn't execute"
ensure
puts "But this does?? #{$!}"
end
The solution is to use a 'rescue Exception' which also catches the abort.
begin
abort
puts "This doesn't execute"
rescue Exception => e
puts "Now we're executed!"
end