Thanks for the clarification.

However,when the new hook is set, the weights that get updated are still the ones that hook_batch_1 defined

one thing that can cause this is that some optimizer (adam, sgd with momentum, etc) actually still update the weights when the gradients are full of 0s. Because of all the momentum terms.
So masking out the gradient won’t be enough to prevent the weights from changing when you do your optimizer step.