The difference is just that when you use the inplace op, you create a more complex graph and so backward through it twice is actually an issue.
Both cases are wrong as I mentioned above as in both cases, the second call backprop into the graph created by the first one.
It just happens that in the case where you use weights directly, the graph of the first one is trivial and since no buffers are saved, you can actually backprop again into it.
When you use the inplace op in the second case, the graph is not trivial anymore and it actually raises an error.