About waterroom_type, sounds like it is client side and that it is the way sound is proceeded clientside when you are under water, or something like that.
About room_type, if you would have looked at env_sound code on HLSDK, you would have found that in function void CEnvSound :: Think( void ), message
SVC_ROOMTYPE is sent.
Then room_type is cache in player pdata m_flSndRoomtype (const m_flSndRoomtype = 249; // last roomtype set by sound entity).
__________________