why (a) the second invocation of .backward() works w/o compiling but fails if the module is compiled, and
(b) why does the first invocation works even with compiling!? Do you have any suggestions how to attack this problem?

Very likely, one of the inputs is modified in place but the JIT fuser combines operations in a way that it needs the input for the backward. This typically kicks in with the second run on (the first being an information gathering (profiling the shapes) run).
You could try if anomaly detection helps you hunt down the inplace modification and remove that.