Okay, I'm getting closer, I think.
Because I have multiple reusable tweens on each UI object, I couldn't assign the event to the correct function using DG.Tweening.DOTweenAnimation dropdown option, because that dropdown doesn't distinguish
which of the multiple tweens to access a function for, and it just calls the first one it finds. It would be nice if a particular tween could be chosen to fire in an OnComplete, but since it can't, for now instead I'm using my string based tween play function to kick the chain off at appropriate times using the events.
Which seems to work for the first iteration. However it doesn't work the second time after that - perhaps the tween is getting killed off when executed this way, or something, even though AutoKill is turned off and my function uses Restart(). I'll keep investigating. It does seem to me though that DOTween seems to be focused more on single-use "play at instantiation" type tweens that are expected to get killed off, rather than reusable tweens for persistent GUI objects. Anyway, I'm sure a solution will arise.