Current work: I think the best solution to LPFing chroma in an edge-preserving way is to LPF luma to a really low frequency (down below the chroma mix-in point), run a good edge detection algorithm (e.g., Canny) on it, and then not blur across those edges.
We can't use the chroma channels for edge detection because (1) we're LPFing them in the first place and (2) the rainbows will show up as edges.
Thoughts?
A good frequency to LPF luma down to would be ~3MHz.
The reason we want to LPF luma before edge detection is that we want to get rid of the high frequency detail that caused the rainbows in the first place!
NOTE: The LPF'd luma would only be used for edge detection and wouldn't be included in the output, of course...