One app has framebuffer attachments that are GL_RGB8_ALPHA8, but changing them to GL_RGBA8 doesn't solve the problem. Both are 3.1 contexts.
Are you certain we're using the same terminology? There's a lot of confusion because "sRGB" is just a standard for 24bpp color[1] that previously had no hard fast criteria in terms of its color gamut, so the word "sRGB" just means legacy color model really. Whereas "linear" color means using physical units (wave lengths.) However for unrelated reasons I guess "SRGB" constants are used to tell OpenGL/D3D that they should do color blending in linear space and convert back to sRGB space. The only reason that's so is prior to sRGB there was no formula for this conversion to happen (or hardware for it) otherwise it should have done that too.
[1] Usually it's associated with 24bpp color. Technically I suppose you can represent sRGB with any figure. It's a nonlinear (not "linear") value space. Therefor I see no reason why an SRGB8_ALPHA8 buffer would convert to linear space, which is why I assume it's bright, since it's using the wrong color model than the one outputted by the shader.
RE "Do you know what OpenGL calls?" No, this is what I mean by "(and I don't know the mechanism)". All I can determine is it's not triggered by SRGB8_ALPHA8 or the version of the app. My best guess is ANGLE is assuming linear output for all glFramebufferTexture surfaces. Although another quirk is it does have a floating-point attachment as a second (multi-render-target) attachment. If OpenGL was as flexible as D3D on the "default buffer" I could easily test out different theories. My system OpenGL driver doesn't behave this way, but it's not OpenGL ES since it's a desktop environment, so I don't know if there is a legit cause for this behavior but it's very frustrating and counterintuitive. Writing a "linear" app is not convenient, nothing in the real world uses linear units. So it doesn't seem right it would be the default behavior to do this, but I'm not familiar with ES enough to know for certain. I know when I wrote WebGL against ES I certainly didn't output linear/physical units. I have written apps that can.