...why is an env_fog_controller even applying underwater? Or do you mean to say it would turn on when someone goes above the water? Regardless, you should be able to set the fog for underwater in the water texture, independent of the fog controller, leaving the fog controller to run things above water. They shouldn't have any effect on each other.
Anyway, my only serious suggestion is, as everyone else has said, your texturing. And it looks like you need a cubemap solution for your terrain. Other than that, looks good.
The water fog only appears when you are inside a water volume. That being said, if you are standing inside of a glass room surrounded by water volumes, the water fog will not be activated, and you will be able to see all the way across the ocean floor from inside that glass room.
My workaround was simply placing an env_fog_controller that matched the same color and thickness of the fog that is in the water that I used. That way, when you are in a dry glass room surrounded by water, the blue fog is still activated.
but thanks for the compliments and suggestions