I suspect the problem is that copy_ must also work on slices and with multiple views, so it is a simplistic operation. Instead, you’re expected to copy in no_grad() context (same as using .data).
w.r.t. CopyBackward, i think these are chained, not replaced (again, to support writes into slices).