With my oldest son, the problem was primarily the shampoo in the eyes (or the unsalinated water, but more often the shampoo specifically).
What we do is keep his towel at hand, and as soon as we've poured water over his hair, he takes the towel and dries his eyes. This gives him some sense of control (similar to Thorin's mask idea). We also use a flexible silicon vessel for pouring water (specifically sold for this purpose, but anything flexible will do) that will somewhat conform to his brow and thus reduce the spillage down the face. He learned around 3 to look straight up when I was pouring water, also, which helps reduce it further.
This of course is for a child that doesn't otherwise mind water in his eyes - in the pool for example he's as comfortable as I would imagine any child is going underwater for brief periods.
We definitely encourage bath time to be as fun as possible, including lots of playtime before the dreaded hair washing. Lots of toys, almost-unsupervised play (I'm in the room so there is no drowning risk, but I don't interfere if he splashes all over, as long as the bath curtain is mostly drawn).
Also consider self-guided showers if she is more amenable to those. This was brilliant during potty training for my oldest; we had a shower head with a flexible hose (like you get for elderly people who shower sitting down), and we found out one day that he loved playing with it in a manner that produced a useful shower. He takes it and moves it around so his whole body is thoroughly wet over and over again, and even (at 3 years old) can use soap in a semi-useful fashion. The hair washing still has to be done of course, and this probably wastes some water (though I'm not sure how much with a low-flow shower versus a full bathtub?), but it might be a change even just to change things up for your little one, and it's a lot of fun. Worked well with potty training after accidents - he could mostly clean himself up with it.