Ignore the fecal matter. Yes... there is B_FILTH as a tag in the game, so yes, poopies do exist. This is not about poopies, radkid. This is about clean and happy dwarves in a simplified way, so that we can create vast and dwarfy mechanisms on top of a simple framework that Toady could code into the game less than a weekend.
There are other threads for those suggestions.
Although.... B_FILTH wouldn't be a bad tag for dirty water. It's unused, it's in there, it could be "(S)earch/(R)eplaced easily enough in the source code to be a non-issue for changing it. But there is actually already an unused tag, which could be simply set on the tiles of water used when bathing. 1 dwarf bathing could add the new... let's call it GREY_WATER tag to 1/7 depth piece of the water.
Okay as anoying as derailment is, I think that radkid1 tripped my brain into something very nice here, so don't hate on him too much.
Bathing uses 1 depth (what's the term here?) of water, flagging it with something. If there is no unflagged water in the bath zone, it fails. Urist McBather cancels bathing: No clean water. Beauty part is: all the other contaminants in the water that could possibly be in there (BLOOD, VOMIT, B_FILTH, Y_FILTH, GOO, MUD, etc) would be checked along with it. It's not "is this? yes/no... is that? yes/no... etc... ok", but rather "is there anything at all? yes/no... ok"
So all this would end up working beautifully in whatever situation you can consider without any changes to the framework to the game.
And actually... it's possible we're all overthinking this, too. Couldn't the dwarf just... jump in the water and climb back out, thereby removing contaminants? Just slap on a sort of "Reaction" to use up a unit of soap in the process?