You did not specify engine, but any decent BT implementation should support some form of task abortion by a decorator, or at least re-running selection on demand.
Make dedicated event handling node right under the root selector, highest priority. Attach a decorator that checks if there is any pending event(s). Allow it to abort lower priority tasks. Put all relevant event handlers under that node.

You probably want to add another decorator, that locks current event handler (ignores other events) for duration of the animation (e.g. dodge), but be aware of event priority (death > dodge) and relevance/expiration (e.g. chaining next dodge while current one runs).
How to implement required functionality from scratch.
Nodes should have an Abort
method, and it must be deterministic: that is, once called, underlying processes (e.g. coroutines and threaded tasks) must be cancelled immediately. If that's not possible, then make Abort
to be a task itself, although this is undesirable.
Decorators should recalculate their states once relevant underlying state changes. One way to do it is with Blackboard and Services. Blackboard is just a collection of variables relevant to the BT; blackboard must notify decorators when any variable changes. Service is blackboard update function that is ran periodically, it copies and/or recalculates relevant state from outside (the agent and the world) into blackboard.
(Note that I am using UE4 terminology here, not sure if standard; btw UE4 BTs are great, you may as well just copy UE's model).
Once relay/gate-type decorator recalculates it's state to new outcome that enables it's node, the decorator should ask BT to re-select current node, starting selection from decorator owner's parent, but only if currently running node is lower priority or child (otherwise BT would just select that higher-priority node again). Note that node need to be aborted only if BT selects another node, otherwise it should continue uninterrupted.