Indeed @Nikronic nails it with the rule of thumb You can use inplace for memory efficiency unless you it breaks.
You might also be less eager to use inplace when planning to use the JIT, as it will fuse pointwise non-inplace operations like ReLU if there are several in a row.
The two things to avoid are:

you move a leaf tensor into the graph (using inplace on something that you just defined with requires_grad=True),
when the operation before the inplace wants to have its result to compute the backward. Whether this is the case is not easy to tell with from the outside, unfortunately.

As a corollary, you should avoid using inplace on the inputs of your re-usable module in lest the future use could be in one of the two situations.
Best regards
Thomas