Could you describe your pipeline? I can only gather so much from what you have but it seems like this is what you are doing.
1. Render underwater geometry at a lower resolution off screen
2. Render world geometry at full resolution
3. Render water at full resolution using off screen data from stage 1
Is this correct?
I think so. I have refraction/reflection textures rendered at 1/4 of the screen resolution, as well as the depth. I then render full screen at full resolution, comparing gl_fragcoords.z with the depth texture (which is at 1/4 resolution)