I have some updates on this.
Inside the smart object’s Gameplay Behavior class, inserting a delay anywhere before calling EndBehavior allows the "Move To and Use Smart Object with Gameplay Behavior" node (the one run by the BTTask, shown in my first post) to return Succeeded.
I discovered this because I had changed my code for other reasons, making it so that EndBehavior wasn’t triggered anyway until receiving an event dispatcher from elsewhere (thus creating a “delay” incidentally).
But I also tested this with a barebones set up inside the Gameplay Behavior and got the same results:
Returns succeeded:
Returns Failed:
-Same as in my first post, my NPCs will still correctly claim, use, then release my smart objects even without the enforced delay, so I still don’t know what specifically under the hood is “failing” there, but at least now it’s possible to detect successes.
**
**
(btw, in testing, this type of delay node did not work, only the “Set Timer By…” types did):