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.