An interesting update guys - two things.
The first is that I tried the "ICV calibration reset" procedure from stevieb's thread on 406 coupe club. I've actually tried it before about 6 months ago and it didn't seem to do much then, but in hindsight I was suffering from an ignition misfire from faulty ignition leads at the time that was probably swamping any other more subtle problems.
Anyway I thought I'd give it another go - basically the procedure is on a cold engine, turn the key on (ignition on but not start) for 10 seconds, then off for 10 seconds, then repeat twice more, for a total of 60 seconds, ending with the key off again. Then start the engine normally.
I was a bit sceptical but I tried it on Friday morning before driving to the train station. WOW! Right from cold the performance was instantly back to 100% normal. None of that trying to accelerate from low rpm in 2nd gear with a wide throttle with the revs falling away as the torque converter locks up and it struggles to pick up speed, just good strong acceleration in all gears with the revs increasing or at least staying constant during the torque converter lock up transition.
The car has been driven on a number of short trips since then and a couple of longer ones and so far no noticeable loss in performance, its running really really well.
I also noticed when I got home tonight to peer under the bonnet while it was still running that the idle sounds "different" to how it has recently - smoother and yet more throaty and V6 sounding in the engine note. A nice V6 burble to the sound that has been missing a bit lately.
I'm a bit sceptical that the ICV itself is somehow "calibrated", especially when the engine is not running as the ICV is a two pole 90 degree stepper motor with PWM control - there's nothing to "calibrate", except learning the required opening by rpm feedback when the engine is actually running.
Possibly the reset procedure does something similar to disconnecting the battery for 10 minutes, although it does seem to be more effective. In any case I doubt whether the improvement will be permanent without doing it from time to time as I'm sure there is an underlying problem gradually "corrupting" the ECU maps (fuel trim and/or knock retard) depending on driving conditions.
Which leads me to my second point - I've had an email conversation with the tech support at lambdapower.co.uk over the last few days who was very helpful indeed - seems to be very knowledgeable on the subject (as you would hope) and even replied to my emails twice on a Sunday!
After discussing the symptoms of the oxygen sensor and engine behaviour in general he's confirmed that the oxygen sensor I fitted last year is indeed the WRONG type.
The first problem is the heater resistance measures 6 ohms but he confirmed the OEM type should be 3.3 to 3.5 ohms. If we assume an average voltage to the heater of 13.8 volts that means the OEM heater should be about 57 watts while the heater in this one is only 31 watts, out by nearly a 2 to 1 ratio. That would go a long way towards explaining why the oxygen sensor just won't warm up properly at idle and is relying largely on hot exhaust gas to warm up.
This means that any time there is extended idling (traffic lights, de-icing the car etc) or light cruising the oxygen sensor is running too cold and giving inaccurate readings to the ECU, which could easily be causing "corruption" of the fuelling adaption maps over a period of time.
Once they get corrupted far enough the engine may start lean or rich misfiring, and lean misfiring may have a knock on effect (ha ha) of causing the engine to ping and the knock sensor to start pulling the timing back, thus corrupting the knock retard maps as well - which may be where the main loss of low rpm power comes from. (As the power loss only occurs at and below 3500 rpm and I believe the knock sensor is ignored above 4000 rpm or at least has a lot higher triggering threshold)
Another sign its the wrong sensor is the original has a brown connector with a keying bump on one side while the replacement has a black connector with the keying bump on the opposite side - the lambdapower guy knew straight away about the brown versus black connector and asked me if the replacement had a brown connector or not.
Finally the part number I dug up in my ebay receipt is not a Bosch number so we believe (although can't be sure) that it may not even be a Bosch sensor.
So I've decided to order the proper OEM sensor from lambdapower (about £83 compared to £140+vat from Citroen) and fit it. I probably won't get a chance to fit it for 2 or 3 months though due to winter weather and lack of shelter to work in.
But at least I definitely know now that the fitted sensor is not the right one and that my suspicion that it is not warming up properly has been confirmed. For the moment the engine seems to be running very nicely - if I have to do this magic key on/off reset every couple of weeks in the mean time until I can get the sensor replaced I can live with that...