Why don't you try what you thought of?
Code:
// iEntity = func_water entity
new Float:vecAbsMin[ 3 ], Float:vecAbsMax[ 3 ];
entity_get_vector( iEntity, EV_VEC_absmin, vecAbsMin );
entity_get_vector( iEntity, EV_VEC_absmax, vecAbsMax );
// origin = ( absmin + absmax ) / 2
new Float:vecOrigin[ 3 ];
xs_vec_add( vecAbsMin, vecAbsMax, vecOrigin );
xs_vec_div_scalar( vecOrigin, 2.0, vecOrigin );
// keep the maximum height
vecOrigin[ 2 ] = vecAbsMax[ 2 ];
__________________