The send-back versus reopen distinction suggests an execution-generation check as well as a board-state check. Closing the old branch does not necessarily stop an already-running agent from pushing or delivering later; the acceptance boundary needs to know which attempt currently owns the item.
I would add a fixture where an old runner delivers after reopen and a new claim. Its result should remain associated with the obsolete attempt rather than replacing the new runner's delivery. That complements your snapshot overlap check: one prevents accidental duplicate starts, while the other prevents stale work from becoming the accepted result.