The 31-year-old made up for a glaring miss in the first half to seal the points for Bergamo side, though Andrea Stramaccioni will be bitterly disappointed with his team
Giacomo Bonaventura headed his side into a surprise lead early on, and they held out until after the break, when Fredy Guarin smashed in a free kick from the edge of the area.
But Andrea Stramaccioni's side, who were poor at the back and sluggish throughout, were caught out by Denis' double and can have no complaints at having lost, even though Palacio offered them fleeting hope late on.
The away side had started well, in fact, but it was Atalanta who took the lead on nine minutes when Bonaventura headed Federico Peluso's whipped cross across Samir Handanovic and into the far corner.
Just moments later Stefano Colantuono's charges were almost in again when Peluso sent another dangerous cross across the face of goal, while Denis fired a volley straight at Handanovic after the ball was worked back into the danger area.
Antonio Cassano stole in on Cristian Raimondi's misjudgement, but the Italy striker was denied by the out-rushing Andrea Consigli.
A frenetic 15-minute period followed, in which both sides exchanged speculative efforts. Luca Cigarini and Ezequiel Schelotto fired long-range shots over the bar for the hosts, while Guarin responded with a couple of his own.
Consigli made another smart stop to turn away Palacio's point-blank header on the line, while at the other end Denis ballooned a shot over the bar from six yards out following Schelotto's low cross from the right. It was a gilt-edged chance for the hosts to double their lead, and it deserved better than its Denis' wasteful effort. The impressive Maxi Moralez, as ever, had been at the heart of the move.
Inter almost made the Bergamo side pay five minutes before the break, but Consigli kept out Palacio's header in an almost identical fashion to how he did so earlier in the match. Again the home side bounced back, and this time Cigarini flashed a wicked shot just past Handanovic's right-hand post.
After the break, Raimondi went unpunished for catching Palacio with a stray arm, before Walter Gargano was booked for a similar offense committed against Moralez.
The bookings began to pile up and Peluso soon went into the book for a trip on Guarin on the edge of the area. And the Colombian made the left-back pay when he lashed home the dead ball from 20 yards out, through the hands of Consigli.
But the hosts were not to be denied and Denis atoned for his earlier error by stroking his side into the lead once again. Moralez was heavily involved once more, as he found space behind Yuto Nagatomo and squared for the former Udinese and Napoli man to tap home from close range.
And Moralez was integral to the hosts' third, too; the Argentine winning a penalty after being brought down by the lunging Matias Silvestre. Denis made no mistake by sending Handanovic the wrong way.
Things almost got worse for Stramaccioni with eight minutes on the clock, but Handanovic got down well to deny Facundo Parra, who should have done better from 14 yards out.
But just as it looked a lost cause, the away side were back in it when Palacio crashed in a low shot after being played in by Walter Gargano.
Parra was appealing for a penalty almost immediately down the other end, but the referee was not interested. Then, in injury time, the Argentine was sent off for an off-the-ball incident with Guarin.
Stramaccioni's men poured forward at the death and forced a number of corners, but they could not find a morale-boosting equaliser that would have kept them on the heels of league leaders Juventus.