Svitolina's 4-6 7-5 6-1 victory meant she added the Rome crown to the ones she took in Taipei, Dubai and Istanbul.
Halep, who won in Madrid last week, took the first set and, although she rolled her right ankle at one point, the Romanian appeared to be coasting towards a win when she broke in the opening game of the second.
But Svitolina forced her way back into the match, as she hit back to take a 3-1 lead and held off several fightbacks from Halep to level the match in the 12th game.
News that makes sense
Your trusted source for staying up-to-date with the world around you. Get free daily news updates and analysis, straight to your inbox.
Svitolina raced to a 5-0 lead in the final set before completing a Tour-leading 31st match win this year.
(Writing by Brian Homewood; editing by Martyn Herman)
