Having opened with a 3-1 win over Ireland, Croatia has four points in Group C. Italy has two points after its opening 1-1 draw with defending champion Spain.
In the final round of group matches on Monday, Italy faces Ireland and Croatia meets world champion Spain.
Italy had numerous other first-half chances from Mario Balotelli, Claudio Marchisio and Antonio Cassano, but the Azzurri lacked finishing quality.
At the start of the second half, Italy rarely threatened, instead choosing to absorb Croatia's attacks. The tactic backfired when Ivan Strinic launched a long pass from the left flank to Mandzukic, who had time to control at the edge of the box and shoot in off the post.
Mandzukic, who appears on his way out from German club Wolfsburg, scored twice against Ireland.
For his goal, Pirlo placed the ball over Croatia's three-man wall and just inside the near post. Croatia goalkeeper Stipe Pletikosa could only get a weak hand on it once the ball was already inside his net.
Italy remains winless against its Mediterranean neighbor in all six meetings since Croatia declared independence from the former Yugoslavia in 1991. The Azzurri are also now winless in their second matches at their last six major tournaments.
Before the match, Croatian fans burned a European Union flag and paraded around Poznan's main old town square with posters of a convicted war criminal. Police, some in riot gear, monitored the situation, but did not intervene.
Already being investigated for fan behavior in the first match, Croatian supporters again threw flares on the field several times in the second half. After Croatia scored, the smoke was so intense that Italy goalkeeper Gianluigi Buffon complained he couldn't see and the match was briefly suspended.
On a damp and cool evening at the Municipal Stadium in Poznan, Croatian fans outfitted like their red-and-white checkered flag vastly outnumbered Italian supporters.
Both sides used the same lineups from their opening matches, and it was Italy that created the better chances early on, mainly through Balotelli.
Cassano placed a perfect pass at Balotelli's feet in the 11th minute, but the 21-year-old Manchester City forward hesitated a moment too long and couldn't get a shot off. Still, the ball found its way to Marchisio, who sent a long shot just over the crossbar.
In the 16th, Balotelli wasted another opportunity with a shot directly at Pletikosa.
Croatia didn't really threaten until fullback Darijo Srna appeared to surprise Buffon with a long shot from the far right flank in the 20th.
Marchisio was stopped twice by Pletikosa in the 37th. Another set piece from Pirlo nearly produced a second Italy goal in the 43rd, but Cassano headed just over the bar following a corner.
Balotelli had another decent chance in the 61st but sent a long-distance effort high. For the second consecutive match, Balotelli was replaced by Antonio Di Natale, this time in the 69th.
After Croatia's equalizer, Italy's only real chance to restore the lead came with a long, powerful effort from Montolivo that was blocked by Pletikosa in the 71st.
Italy: Gianluigi Buffon, Giorgio Chiellini, Daniele De Rossi, Leonardo Bonucci, Emanuele Giaccherini, Claudio Marchisio, Andrea Pirlo, Thiago Motta (Riccardo Montolivo, 62), Christian Maggio, Antonio Cassano (Sebastian Giovinco, 83), Mario Balotelli (Antonio Di Natale, 69).
Croatia: Stipe Pletikosa, Darijo Srna, Vedran Corluka, Gordon Schildenfeld, Ivan Strinic, Ivan Rakitic, Ognjen Vukojevic, Luka Modric, Ivan Perisic (Danijel Pranjic, 68), Nikica Jelavic (Eduardo, 83), Mario Mandzukic (Niko Kranjcar, 90).
By Andrew Dampf