I think there is a hierarchy of InformationLoss going from lossless to total loss, about as follows (examples in brackets):
I agree if we disregard the meaning of useful information. According to my definition of "information loss" as "loss of useful information", all mentioned above cases don't cause "information loss". In the case of jpeg images, we compress them only if extra information is not useful for a specific purpose. In the case of a compiler, all variable names or comments are useless for program execution (unless we need to debug it). More than that, all those mentioned cases cover only secondary information, because humans usually don't edit compressed jpeg images or compiler output or JavaDoc output.
I agree that it seems obvious, but something like "Refactoring brings discarded useful information back into the code" or "CopyAndPaste discards useful information" doesn't seem as obvious.
Now as I think about your example about editing compiler output: by editing compiler output you discard useful information (information about your ability to recompile or if you recompile information about your edits). It may not be obvious for people that editing compiler output is a bad thing to do, but something like "We must never discard useful information." can make them think about it and prevent them from doing it. Of course, if you don't have source code and try to crack binary output, then you don't have anything to lose and in that case it's not bad to edit binary files.
Think about "We must never discard useful information." as a helpful test when designing software. It's obvious, but very often people don't follow it, disregard it, don't trust it or make it the lowest priority of consideration. I think that this principle should take highest priority during any system design, higher than any other design rules such as OOP/OOD, normalization or anything else. If someone wants to make a good OOP design, violating "We must never discard useful information.", then he is doing a BadThing.
-- Aleksey