I can't lay hands on an oscilloscope to check my O2 sensors, but it seems dubious that they're both dead at the exact same time. My cheesy OBD-II program can't seem to get the min/max voltages of the sensors when the engine is running.
I now have a new lead though: I found a BMW SI # 110602 in the TIS program:
"The crankcase ventilation pipe can be damaged at the bend by chemical attack due to the formation of condensate from the acidic fuel and water mixture flowing through it.
"The chemical attack can lead to the formation of holes, through which the engine draws in secondary air."
It goes on to state that this could cause problems that would be caused by a leaner mixture, and can activate the "Service Engine Soon" lamp.
The part # for the crankcase ventilation return pipe is 11157520035.
So, next week I'm going to see if I can get to that pipe, remove it, and check if it leaks air.
The SI says this defect "is not contained in the official Defect Code Catalogue but has been included in the system, thus enabling warranty claims to be processed." Another secret-warranty item I guess.
It says at the bottom "Reimbursement is limited to 4 years/100,000 km and only possible until February 2004." I guess I could try and force the dealer to fix it for free (if that's indeed the problem), but I'm leaning toward fixing it myself rather than let them touch my car again.
As an aside, it sure is ANNOYING the way BMW tries to hide info as much as they can from me, making it that much harder for me to fix my own car. I see they sell info at bmwtechinfo.com, but they charge big bucks for it! And alldata.com won't sell BMW TSBs "at the request of the mfr".