The Italian won 4-6 7-5 7-5 and claimed her first WTA 1,000 victory, despite being 5-3 down in the deciding set.
World number 40, Kalinskaya, of Russia, was serving for the match in the third set but she never reached match point.
Paolini won 16 of the last 19 points to win the final four games and secure the victory.
“I’m really surprised,” Paolini said. “I’m really happy. It was a really tough match. She’s playing unbelievably.
“To come back was really tough. I tried to stay positive every point. I’m really proud of myself.”
The 28-year-old, the world’s number 26, won her first WTA singles title at the WTA 250 Portoroz in 2021.
She has been in three finals since in search of her second WTA title but had lost them all until Saturday’s victory against Kalinskaya.
The Russian qualifier came into the final in fine form, having ended Iga Swiatek’s seven-match winning streak when she beat the world number one in the semi-finals.
But Kalinskaya, who knocked Paolini out of the Australian Open in January, failed to replicate that form in the final.