Milan - still the only unbeaten team in Europe's top-five leagues - raced into an early two-goal lead but were pegged back.
Here is a run through of some of the most notable performances that were produced in Wednesday's Serie A contest.
✔️ GOOD PERFORMANCE
Luis Alberto: 7.3
It was Alberto who got Lazio back into the game, reacting quickly to Ciro Immobile's saved first-half penalty to head the rebound beyond the unfortunate Gianluigi Donnarumma.
The midfielder was excellent in the weekend win over Napoli and shone again here. He had a game-high 30 passes in the final third and three attempts on goal as he was constantly involved, not deserving to end up on the losing side.
❌ BAD PERFORMANCE
Alexis Saelemaekers: 5.8
Saelemaekers was substituted for Samu Castillejo after 64 minutes.
That move from Stefano Pioli came after the winger could not get involved in the game. He had one shot off target and attempted just 18 passes, completing 67% of them.
His goal against Sassuolo at the weekend hinted at a breakthrough, but he was back to his struggles of the previous weeks here.
⭐ STAR MAN
Hakan Calhanoglu: 9.3
Calhanoglu curled in an excellent corner for Ante Rebic's opening goal and soon made it two for Pioli's men by sending Pepe Reina the wrong way with a penalty.
The in-form playmaker then set up the 92nd-minute winner with another superb corner.
Calhanoglu has either scored or assisted in five of Milan's last six games and ended this game with three goal involvements.
In a fine all-round display, he also won six of his eight duels and had the most final-third passes (28) among Milan players.