I am going to sound like an ogre, but I swear I am a normal happy mom of 2 really great kids. Sometimes shock treatment works. My daughter has taken her own bath since she was 4 and now takes her own showers (yes, I was always around for the baths or nearby w/ door open). When she was older I had her start giving her brother, 4 at the time, showers. He'd sit on the bathtub floor (wasn't allowed to stand up for fear of slipping) and she'd scrub him and do his hair, then wash herself (great system, trust me!). But bathtimes got a little crazy a couple of times, so I warned them that if they only played and didn't get washed up within a reasonable amount of time, I'd come in to finish the bath.... with cold water. I thought the crazy warning would be enough, but kids being kids, they tested me a couple weeks later. I didn't really want to, but I had to follow thru on what I said... NEVER happened again. Now they ask to take their showers together having a great time playing, AFTER they finish getting washed up. And we laugh about the cold water day! But they know to do what I ask now.
I used to use a cup to gently pour the water directly over my daughter's hair, I'd also giver her a washcloth to cover her eyes, I'd play peek-a-boo and that way the water wouldn't run and she didn't feel out of control.
We got a foam shampoo just this week and it rinses very clean. Another suggestion is to dilute the shampoo so it's not so thick. You really don't need a lot to get her hair clean. The less rinsing you have to do, the easier a time you'll have :)
Have you tried giving her a cup or something so she can wet her own hair? Or a watering can? It might be more fun for her that way. Tell her she's a flower you have to water ;)