Schiavone, who last year became the first Italian woman to win a Grand Slam singles title, will face Australian Open runner-up Li Na in Saturday's final.
Schiavone converted her second break point in the eighth game of the first set and then held to take the lead.
In the second, Bartoli led 2-0, but Schiavone broke back in the third game and then again in the seventh for a 4-3 advantage. She broke again in the final game, winning four straight points on Bartoli's serve.
After winning, Schiavone rubbed her hand in the clay and then kissed it.
Short link: