For anybody else experiencing this problem, I have found an extremely clunky workaround, but it works. I suddenly experienced this bug (or at least something similar to it) on a project in which I had previously been using Coqui’s Animal Behavior Kit for several months – with no problems at all – but I was having (for at least the past several weeks) this fatal game-breaking bug that would inexplicably cause some AI’s to just get stuck forever once one of their Blackboard needs had changed (from Roam to Eat, from Roam to Drink, from Roam to Breed, for example).
Unfortunately, the solution (though certainly not an answer by any means) I came up with involves at least a small amount of C++, so admittedly, it may not be feasible for anybody who is needing it to actually implement it – and as far as I know, there is no / are no other ways to get a BTNode object reference from within Blueprints.
The workaround in brief is that: instead of trying to get the aborting behavior to work properly from within the Behavior Tree, I exposed one of the CPP / C++ functions of the UBehaviorTreeComponent to Blueprints, so that I could get the exact node that was still in the middle of being executed (i.e. leading up to) the next Blackboard value enum change (again, Roam → Eat, Roam → Drink, Roam → Breed), and manually call Finish Execute on it at that exact moment when the (in my case) Behavior Tree Service sets the next BiggestNeed AKA the next Blackboard value enum – which (that is, the changing-of-the-value itself) is responsible for, and is supposed to cause the current Sequence / Selector AKA the Sub-Tree, to abort, but which for some mysterious reason, does not.
(the includes are kind of a mess because I have a lot of other helper / debugging functions in there)

UFUNCTION(BlueprintCallable, meta = (DisplayName = "GetActiveNode"), Category = "AI Debug")
static const UBTNode* GetCurrentNode(const UBTNode* ActiveNode, UBehaviorTreeComponent* InputBehaviorTreeComponent);
const UBTNode* UAIDebugBlueprintFunctionLibrary::GetCurrentNode(const UBTNode* ActiveNode, UBehaviorTreeComponent* InputBehaviorTreeComponent)
{
ActiveNode = InputBehaviorTreeComponent->GetActiveNode();
if (ActiveNode != NULL)
{
return ActiveNode;
}
return nullptr;
}
#include "AIDebugBlueprintFunctionLibrary.h"
#include "GameFramework/Character.h"
#include "BehaviorTree/BehaviorTreeComponent.h"
#include "BehaviorTree/BehaviorTreeTypes.h"
#include "BrainComponent.h"
#include "AIController.h"
#include "BehaviorTree/BlackboardComponent.h"
#include "BehaviorTree/BTNode.h"
#include "Kismet/KismetSystemLibrary.h"
Hope this helps someone.