Spot-kicks help 10-man Fiorentina hold Milan
Inter were set to move above Fiorentina in the race for a Champions League place when Ricardo Alvarez scored twice in four minutes to put them 3-1 ahead, until his fellow Argentine Denis sprang into action on a day of drama and controversy.
Elsewhere, Josip Ilicic scored a memorable individual goal, beating four players in a run from the halfway line before firing past Sergio Romero, to give strugglers Palermo a 3-1 win at Sampdoria, their second successive win.
Antonio Di Natale scored twice in Udinese's 3-1 win over Chievo, the first after goalkeeper Christian Puggioni made a hash of trying to dribble his way out of trouble and the second a magnificent volley from an almost impossible angle.
Napoli stayed nine points behind leaders Juventus in second place with a 2-0 win over Genoa thanks to first-half goals from Goran Pandev and Blerim Dzemaili and the Catania-Cagliari and Siena-Parma matches ended goalless.
Third-placed Milan (58 points) stayed six points ahead of fourth-placed Fiorentina (52) with Inter Milan and Lazio, who face neighbours AS Roma on Monday, two points further behind in the race for the Champions League qualifying round place.
The top two in Serie A qualify for the Champions League group stage and third place earns a place in the play-off round.
Juventus, 2-1 winners at home to Pescara on Saturday, have 71 points and Napoli 62.
Tommaso Rocchi put injury-plagued Inter ahead two minutes before half-time at the San Siro but the real drama came in the second half with six goals in 21 minutes.
Giacomo Bonaventura levelled in the 56th minute but Alvarez immediately put Inter back in front, pouncing on a loose ball, and struck again four minutes later with a superb solo goal.
Denis pulled one back with a 65th minute penalty, fired the equaliser six minutes later and volleyed the winner from close range in the 77th minute. There was still time for Atalanta's Cristian Raimondi to be dismissed in stoppage time.
AC Milan midfielder Riccardo Montolivo scored 14 minutes into his return to Fiorentina, where he spent seven seasons.
The Italy man ignored the jeers from the crowd as he dispossessed David Pizarro 30 metres from goal and rolled the ball into the corner from the edge of the area.
"I didn't expect an easy welcome, the fans pay to watch and they can do what they want," he told reporters.
Nenad Tomovic was given a straight red in the 40th minute after being adjudged to have elbowed Stephan El Shaarawy as the two tussled for the ball, bringing furious protests from Fiorentina players who surrounded the referee to remonstrate.
Fiorentina playmaker Stevan Jovetic then limped off after appearing to aggravate a thigh injury to complete a nightmare first half for the hosts.
Milan appeared home and dry when Mathieu Flamini scored in the 62nd minute from a chance created by Montolivo but instead Fiorentina hit back.
Adem Ljajic won and converted a controversial 66th minute penalty and Pizarro stepped up to fire home his own spot-kick seven minutes later after Juan Cuadrado was tripped.
Milan could have had a penalty in stoppage time when Sebastian Roncaglia blocked Ignazio Abate's shot with his hand, although it appeared to be accidental.
"I won't say anything about the referee, he had a tough job in difficult conditions," said Milan coach Massimiliano Allegri.
"He made decisions that made one team happy and then he made others that made the other team happy.
"We played well in the first half but in the second we were off form, mentally speaking. We should have managed possession of the ball better, we shouldn't have conceded the second goal and we shouldn't have thought that the game was already over."