In preparation for 7DRL, I went back to my abandoned playing-as-a-crowd-of-guys roguelike and
dumped all of the deferred rendering. It created a lot of complexity in the form of async code. It plays just as well as it did before, and it's a lot simpler now.
I thought I needed it because, in an earlier version of Godot, things would flicker if there were a bunch of sprite updates across frames close to each other. So, I batched everything together to render updates from the same turn to happen in the same frame.
What I should have done is waited for a new version of Godot, it turns out.