Good news! Just got to drive the car home
Here's what the mechanic said:
Coolant tank lid popped off lost all coolant suspect head gasket blown.
Removed inlet manifold and removed all coil packs and spark plugs. Carried out cylinder leakage test, then high pressure test to see if head gasket leaking, tested OK. Only cylinder 5 (center on front bank) was down to 40% leakage. Retest next time its in here, may just be deposit under valve.
Reassembled. Ran car with scan tool attached and checked temperature and pressure in cooling tank while it heated up. Got to 103 degrees and fans not running, pressure at 90 degrees was just under 10 pounds (seems OK).
Checked fan relays and powered up fans, working fine. Swapped over high and low speed relay, fans run on low speed now. Needs new relay, ordered.
Left relay in low speed section in meantime so it doesn't overheat.
I asked him to explain some of the symptoms, and he was happy to go into detail.
Q: Why did the coolant tank cap pop off?
A: Due to the fans not kicking in at the right time, the coolant got too hot and as a result over-pressurised. He said it shouldn't really happen if the cap was working properly. But I believe when this happened, the plastic expanded and the cap now screws on securely - it doesn't pop off if you screw it down too hard like it used to.
Q: What could cause the traces of oil in the coolant?
A: If the coolant was getting hotter than it was supposed to, it could have expanded some parts in the engine that it normally wouldn't. This could cause a small amount of oil to seep into the coolant.
Q: Is it okay to drive in its current state?
A: Yep, although you should take it easy. Shouldn't be a problem unless you're tearing up a hill with a trailer or something, but better safe than sorry.
New relay will be here in 2-3 days, hopefully this fixes it once and for all. Diagnostics ended up costing ~$270 (~135 pounds), the part should be ~$50 I would think.
Would be keen to hear if anyone's got any more thoughts. If there's one thing to learn from this - always get the second opinion!
Also the receptionist has been really nice today - maybe cause she found out I took the car elsewhere. Who cares, as long as she's friendly and helpful