The No.1-seeded Williams hit just three unforced errors en route to a 17-minute, 6-0 first set, far outweighing those with 12 winners - and a shell-shocked Halep managed just six points in the set.
The second set was far, far closer, nearly three times as long, with Halep summoning the kind of guile and consistency that got her past Grand Slam champions Marion Bartoli and Samantha Stosur in her last two matches - but an untimely double fault on match point handed Williams a 60 64 victory.
Williams wasn't impressed with her play at all - a sentiment that must have come from the second set.
"I definitely haven't felt that good all week, so I'm surprised I'm still in the tournament to be honest," Williams said afterwards. "The first set I thought I played really well. I was actually surprised I made some of those shots, because I really don't remember looking at the ball. I could have sworn I was catching it late, and I was like, 'How did that go in?' But overall that was just a really good set for me.
"Things are here. At the end it's not really about how you play, it's about being able to win, whether you're playing well or not. So far I've been able to be in the semifinals. It's a good result. I obviously want to do better this week, and I'll just have to see how it goes. I'm still alive, and that's what matters."
Next for Williams is No.5 seed and defending champion Li, who made the semifinals via walkover against No.4 seed Agnieszka Radwanska, who pulled out of the tournament with personal reasons.
Williams leads Li in their head-to-head series, 7-1, but every one of Williams' wins has been in three sets or in a tight two-setter. Li's lone triumph came at Stuttgart in 2008 on indoor hardcourts.
"She's a really tough player whether she had a day off or a three or five set match today," Williams said. "She's so fit, she would be ready to play just as tough tomorrow. So that doesn't matter.
"It will be a really tough match because she has such a good game and she does everything so well."
The other semi pits No.2 seed Victoria Azarenka against No.14 seed Jelena Jankovic. Jankovic was the first to win, coming from 2-4 in the second set to beat No.12 seed Roberta Vinci in straights, 60 64.
"In the previous matches I played badly in the first set, but today was different," Jankovic said. "I came out strong. I was really confident with my game. I felt like a top player. In the previous matches I was a little bit insecure and not feeling my shots, but ended up working my way through the match."
Azarenka beat No.10 seed Caroline Wozniacki in the night match on center court, 63 76(5).
Azarenka leads Jankovic in their head-to-head series, 4-3, winning their last three in straight sets.