This happened to me in prod with Oracle. Lost a critical optimization in prod because my case of a table changed from upper to lower.
So, you changed code and didn't test it. Yup, definitely Oracle's fault.
That's not even really a CBO issue. But I hear your pain :-)
Sometimes you just aren't going to pick up this sort of thing in testing as you'll only know about it under full production load. Their CBO is pretty powerful, but by and large it's often difficult to know why it makes certain decisions. And that's even when you use their full suite of profiling tools!