Muguruza was broken in the opening game of the second set before turning the match around to win 3-6, 6-3, 6-2. She has reached back-to-back semifinals, having lost to Petra Kvitova in the Qatar Open final last week.
Muguruza faces Elise Mertens in the semifinals after the 10th-seeded Belgian saved three match points to beat Jessica Pegula 5-7, 7-5, 6-0. Pegula served for the match at 5-3 in the second set and had the match points on Mertens' serve in the next game. Mertens won the last 11 games.
Muguruza won her only previous meeting with Mertens at the 2016 U.S. Open. Jil Teichmann won 6-3, 6-3 against 16-year-old American Coco Gauff to set up a semifinal with doubles specialist Barbora Krejcikova.
Krejcikova is a match away from her second career singles final after beating Anastasia Potapova 6-0, 6-2. The Czech player is a five-time Grand Slam champion in doubles, including winning her third consecutive mixed doubles title at the Australian Open last month. Her only tour singles final was a one-sided loss to Kiki Bertens in Nuremberg in 2017.