Willingham scored both of the Minnesota runs in what was only the second win for the Twins in seven games.
Pittsburgh tied it in the seventh on a sacrifice fly by Rod Barajas, but the Pirates left two men on in that inning and quickly fell behind again.
After reliever Jason Grilli (1-2) retired the leadoff man in the eighth, Willingham hit an 0-1 pitch over the wall in left-center. The blast, Willingham's 14th of the year, made a winner out of Jared Burton (1-0).
Burton worked 1 1/3 innings in relief of Francisco Liriano, coming in after Liriano had allowed the sacrifice fly to Barajas. It was Burton's first major league victory in three seasons.
Glen Perkins walked one in the ninth to claim his first save of the year and the third of his seven-year career.