Usually, in the stereo instancing path, we source unity_StereoEyeIndex from the fragment input structure's stereoTargetEyeIndex member. In fact, stereoTargetEyeIndex is needed as it is bound to the SV_RenderTargetArrayIndex semantic, which dictates which render target array slice is rasterized to.
However, for whatever reason, reading stereoTargetEyeIndex is not reliable in the fragment shader. However, if I use the raw instance ID passed into the fragment shader, that works correctly. More work probably needs to be done, but this is fine for now.