Or for something completely different, use interfaces and dependency injection with some proper OO design to finally get rid of behavior trees.
IMO they are not worth the trouble for a single AI with enough computing/space resources. They are decent for a strategy game or MMO in general because of their actual agent independent nature, but they make trade offs not suitable for a single agent.
Just define proper interfaces like IMovement, ICombat (which would be AI specific) etc. and implement what you need in your AI. Then tell your DI container (I prefer https://github.com/autofac/Autofac, YMMV) to override the interfaces you want satisfied through the custom implementation.
That way, you actually get a completely opaque tree (possibly a DAG), which is basically what behavior trees are (in a data driven form) without all that for our purposes needless optimizations.
The stuff like Decorators etc. are actually completely analogous to its GoF pattern counterpart.
Also, nothing prevents you from ticking your behavior tree each tick, meaning you don't have to do that goo with remebering what your last state was etc. That's also mostly needless optimization.