It doesn't matter if that code path gets interrupted. There's no need to synchronize anything. If interrupt A sees that the extra registers are idle, and then gets interrupted, that's okay. By the time the inner interrupt returns, even if the inner interrupt used them, they will be put back to idle, and A can safely switch to them. Everything else works the same as current hardware.
There's the cost of a branch, but you could remove that by making it a hardware feature. It's a branch that should predict well though.
There's the cost of a branch, but you could remove that by making it a hardware feature. It's a branch that should predict well though.