I checked Squeak. All my examples work consistently there: UnhandledError handler is always triggered. Even more: signalling new error from the handler block passes it from the original signallerContext:
[ > > [ 1/0 ] on: MyTestError do: [ :e | self halt ] > > ] on: ZeroDivide do: [ :z | MyTestError signal ] > > This code halts in Squeak.
