Uruguay went into the match with a three-pronged attack aimed at pressurising Denmark's ageing back-line.
Using the pace of the buzzing Dario Silva and the cultured left boot of Alvaro Recoba, the South Americans seized the early initiative.
But Denmark posed plenty of attacking threat themselves and exerted an increasingly tight grip on the game as the first half progressed.
Wide men Jesper Gronkjaer and Dennis Rommedahl consistently exposed Uruguay down the flanks.
And the physical presence of Ebbe Sand added to their discomfort in the middle.
It was Sand, leading scorer in the Bundesliga last season, who had the game's first chance on 12 minutes.
The Schalke striker stole in behind the Uruguay defence to meet Thomas Helveg's cross with a downward header that bounced up and over off the bar.
Uruguay's principal threat came from Internazionale forward Recoba, who looked especially dangerous with the dead ball.
He curled one free-kick inches wide in the eighth minute, forced a save out of Thomas Sorensen mid-way through the half and also teed up Gustavo Valera for a header he directed straight at the Danish keeper.
But Denmark possessed the sharper cutting edge and took the lead with a well-crafted goal on the stroke of half-time.
A neat combination in midfield freed Gronkjaer down the left to cross low for Tomasson to finish cleanly from eight yards.
Uruguay needed an instant response after the break.
And they got it within two minutes of the restart with what is destined to be remembered as one of the finest finishes of the competition.
Recoba's corner was cleared by the Danish defence but the ball looped to Rodriguez in the inside-left channel, 25 yards out.
The full-back struck a perfect volley with the outside of his left foot that curled into the top corner at the near post, giving Sorensen no chance.
Both sides continued to search for a winner but chances remained at a premium.
Sand had an effort blocked on the hour, and Recoba brought a save out of Sorensen four minutes later.
But, finally, Tomasson came up with the decisive touch eight minutes from time.
Substitute Martin Jorgensen swung in a cross from the left which the former Newcastle striker rose to meet with a subtle header that went in via the underside of the bar.
Uruguay: Carini, Mendez, Sorondo, Montero, Rodriguez (Magallanes 87), Garcia, Guigou , Varela, Silva, Abreu (Morales 88), Recoba (Regueiro 80).
Subs Not Used: Bizera, de los Santos, Elduayen, Forlan, Lembo, Munua, O'Neill, Olivera, Romero.
Booked: Mendez.
Goal: Rodriguez 47
Denmark: Sorensen, Henriksen, Laursen, Heintze (Niclas Jensen 57), Helveg, Tofting, Gravesen, Gronkjaer (Jorgensen 70), Tomasson, Sand (Poulsen 89), Rommedahl.
Subs Not Used: Bogelund, Christiansen, Claus Jensen, Kjaer, Lovenkrands, Lustu, Madsen, Michaelsen, Nielsen.
Booked: Heintze, Laursen.
Goals: Tomasson 45, 83.
Att: 30,157
Ref: SK Mane (Kuwait).