You build your JavaDelegate as extension of AbstractBpmnActivityBehavior.
If you throw a BpmnError in signal(), it cannot be handeled by a boundary error event or a event based subprocess.
If you throw a BpmnError in execute(), everything works as expected.
A project to create the error is attached. See and run the JUnit test.