I haven't narrowed it down to the actual polygons, I simply isolated the cause by editing the shaders and switching between two saved views where the problem was visible.
Just for interest here's a bit more detail:
In vertex shader:
Out.fog_z = Out.oPos.z * fog_info.x; // fog - multiply Z depth by fog factor
At end of pixel shader, this one is bad:
return float4(lerp(fog_col.rgb, ret.rgb, exp(In.fog_z), ret.a);
And this one fixes the problem:
return float4(lerp(fog_col.rgb, ret.rgb, saturate(exp(In.fog_z))), ret.a);
As exp(z) cannot be a negative value, the saturate is just keeping the value <= 1.
The prevented value of > 1 could only result from fog_z being negative. [EDIT: Sorry, I mean Out.oPos.z would have to be negative. fog_info.x is a negative quantity like -0.00008]. But this shouldn't be the case as the points in question were somewhere like 200m to 400m away. I suppose the calculation that sends the values into the pixel shader can come up with some crazy values if the polygon is very oblique, near horizontal relative to the view direction, and in conjunction with MSAA. My viewpoint was near one end of the BL car park, and these pixels were on some grass past the other end. I also got it coming over the brow of the slight hill before turning right to go under the bridge near the end of BL GP lap.