I've tracked this down to Container.paint(), and the problem is not with or unique to WatermarkDecorator. The issue is that we only clip to the child component's bounds on componentGraphics, which is a copy of decoratedGraphics. Thus, decoratedGraphics never gets the clip, and it's left with the clip of its parent.
It's possible that this is meant as a feature - I know that decorators are allowed to paint outside their bounds but not their parent's bounds. However, I thought that this meant that decorators were supposed to restrict their decorated bounds to the bounds of their parent (as a matter of policy), and that they would be given a clip equal to their decorated bounds. It's pretty confusing to report your decorated bounds as that of your component and to be given a larger clip. In the case of the watermark decorator, it has to call graphics primitives methods on regions outside of its decorated bounds, and it relies on that clip.
The bottom line is: should WatermarkDecorator and those like it be changed to clip to their bounds before they draw, or should this be addressed on Container?