Dunne headed Martin Olsson's cross into his own net six minutes from time to ensure Rovers finished 10th in the Barclays Premier League after a run of only one defeat in their last nine games.
Villa, who had plenty of chances to win the game themselves, hung on to sixth place thanks to Liverpool's goalless draw at Hull, and will not have to play an extra round in next season's Europa League.
It was a satisfying outcome for both teams at the end of a match that at times had the distinct feel of a final-day encounter.
The hosts had the first chance after six minutes when John Carew intercepted a misplaced backwards pass by Gael Givet.
The Norwegian surged forward only to be outmuscled by Chris Samba, but from the resulting corner, James Collins directed a header on target which Paul Robinson did well to save.
At the other end, Brad Friedel fumbled a long ball over the touchline and after Villa had dealt with one corner, the next led to David Dunn driving an effort wide to the right.
Villa broke back as Carew latched on to James Milner's through-ball, but Robinson dived to smother the striker's cross into the six-yard box.
Teenage defender Grant Hanley - making his Rovers senior debut - showed he was not afraid to go in where it hurts when he got in the way of a Carew attempt, and Stewart Downing came off worst in a clash of heads with Michel Salgado as they leapt to meet Ashley Young's cross, the former Middlesbrough winger having to receive treatment before carrying on.
Hanley then attempted to make his presence felt in the opposition's area, rising to connect with Dunn's corner but sending his downward header wide.
Five minutes before the break, Villa's former Blackburn defender Stephen Warnock limped out of action to be replaced by Luke Young.
Moments later, Robinson parried a fierce drive from Collins, but Gabriel Agbonlahor was unable to take advantage.
Robinson then pushed away Milner's free-kick from 25 yards after Dunn had brought down Young, and was on hand again to collect Agbonlahor's close-range header.
Rovers boss Sam Allardyce brought on Morten Gamst Pedersen for another debutant, Amine Linganzi, at half-time and the substitute's free-kick was punched away by Friedel shortly after the restart.
Dunn then thought he had won a penalty after going down in the box under a challenge by Collins having been fed by Keith Andrews.
Replays suggested contact was made between the two players, but referee Steve Bennett adjudged Dunn to have dived and showed him the yellow card.
Villa almost made the breakthrough moments later but Milner was unable to get the decisive touch at the far post after Carew had headed on Downing's cross.
Friedel then pushed away a drive from Andrews, but it was the hosts who were still looking the more incisive as Stiliyan Petrov fired a shot into the side-netting.
It was Villa's turn to scream for a spot-kick 15 minutes from time when Samba tangled with Carew, but again it was to no avail as Bennett waved play on.
That would be Carew's last contribution as he departed the field for Emile Heskey, who could have made an immediate impact but sent a bouncing header wide from just a few yards out.
Villa manager Martin O'Neill then threw on Nathan Delfouneso in search of a winner, but it was Rovers who found it six minutes from time.
Olsson delivered the cross and Junior Hoilett dived to meet it with his head - but it was his marker Dunne who got the final touch as the ball flashed past Friedel and in.
Milner then stung Robinson's palms with a volley, but Rovers hung on to secure their place in the top half.