Well, simply put, it's impossible to make it look smooth on a white background without changing the sprite. (From my perspective. I may be wrong, if I am pretty please let me know why my reasoning is flawed)
But why?

Color is composed of Hue, Saturation and Value.
Mainly, our color value is what makes the sub pixel interpolation works. In the case of the black background, interpolation is seen as the following sequence:
Value 0, Value 0, Value 54, Value 0.
Value 54, Value 68, Value 95, Value 68.
In the case of the white background it looks like this:
Value 100, Value 100, Value 54, Value 100.
Value 54, Value 68, Value 95, Value 68.
In a graphic manner:

Why does this crap matter at all? You already discovered it but I'd rather explain it in case anyone would like to read about this since is a not-so-easy subject. Sub pixel needs two lines of pixels to work, pretty much like in the example image I posted. And to look smooth both lines have to follow the same sequence pattern, in this case: Dark - To - Light - To (Rinse and repeat)
What happens when changing the background to a white color is that both lines no longer follow the same sequence, one keeps following the Dark - To - Light - To but the other line start working as a Light - To - Dark - To sequence what makes the sub pixel animation to stop working at all, hence the pop.
If you pay close attention to your last edit you did (Dark Border on Light Background), it kinda pops less than the first attempt but it won't look as fluid as the other two attempts (That you totally nailed), and for what I know this have no workaround at all.
You already figured out how to use subpixel animation on a white background modifying the colors of the sprite wich for me is the only way possible. Again if I'm wrong about this please let me know!
EDIT: *Creepy, deep voice* Come to Papa @Cels, Papa can help you.