If my understanding is correct, then could you use Godot's built in features that match your desired features? Scenes can be used as entities, and Nodes can be used as components. The SceneTree is the state. Or is this basically what you are already doing?
Also, could it be better to keep a log of events, rather than a log of states. As long as your gameplay is deterministic, then given the same starting state and sequence of events you would get a replay of exactly the same game.