thank you for your help! I had 2 mistakes in my current code (the points from 2 - 5, I had corrected them before):
I was calculating the normal as:
normal = normalize(float3(derivativeX, 1, derivativeZ));
where it should have been with minus sign, as you said in your post.
The second mistake, was the scaling of the final accumulated height. I didn't expect it to have such a big impact!
So, thank you for your help, here is a screenshot of how the water looks now
Male