The 17th-ranked Safina also beat No. 1 Justine Henin and No. 8 Serena Williams at the clay-court event.
The 22-year-old Russian overcame a slow start and dropped the first set - as in her two other upsets - before her shots began to find the lines.
Safina claimed her sixth WTA Tour title and first this year at the French Open warm-up tournament. She won $197,000 on Mother's Day.
"My mother can buy anything she wants,'' said Safina, whose mother was at the event. "She can walk into any store and I will pay for it.''
The 22-year-old Safina, the sister of two-time Grand Slam winner Marat Safin, now has beaten top-10 players 11 times.
Ivanovic reaches German Open semifinal
Serena’s winning streak ends at 17 matches
Fatigued Henin withdraws from Italian Open