I resolved this by adding the ability to explicitly reserve elements, just as we do when we expand the tables, without this affecting the logical table size. This means the reservations guarantee space, but that space is not part of the logical array. The space is then written and the logical size updated. The increase in logical size is already atomic, so that results in a safe publication of the record. This was simple except it had a big impact on test mocks. That's now updated as well, and the issue is resolved without any additional locking or performance hit.
(edited)