US Postal leader Armstrong, who started eighth from last in accordance with his overall position, failed to beat the day's best time of 1 hour, 2 minutes and 18 seconds set by Colombian Santiago Botero of the Spanish Kelme team on a sun-drenched 52-km course from Lanester to here.
It is Botero's second Tour stage win, and his first in a time-trial.
Armstrong came second at 11 seconds, to partially close the 34-second gap that existed between him and ONCE rider Gonzalez de Galdeano prior to the stage.
In the overall standings, Gonzalez de Galdeano, who finished fourth in the time-trial at just 19 seconds behind Botero, still sits on top with Armstrong second at 26 seconds adrift prior to Tuesday's rest day.
Ukrainian Serhiy Honchar, third in the time-trial at 18 seconds, moves up 15 places to fourth in the overall standings just behind Spaniard Joseba Beloki of the ONCE team, who is in third at 1:23 behind his teammate.
As the battle for the yellow jersey continues, the day belonged to Botero, a noted climber who also showed he can cut it on the flat when he came fourth, at only four seconds, behind Armstrong on the prologue at the start of the Tour.
The amiable Colombian, who also took a bronze medal in the time-trial at the world championships last year, pulled off a brilliant performance to hand the American his first defeat in two years on a course described as "very difficult."
"I was very motivated for the time-trial, and when I heard that I was first at the first checkpoint, it just motivated me even more," said Botero, who moves up to fifth place overall.
Elsewhere, Britain's David Millar reclaimed possession of the white jersey for the Tour's best young rider, and now sits seventh overall at just over two minutes behind the race leader after he clocked the day's seventh best time at 50 seconds adrift of Botero.
Millar, of the Cofidis team, now has over a minute lead in the standings for riders aged 25 or under.
Stage 9: Post-stage commentary
Stage 9: Live update summary
Stage 9 results, top 15 (Lanester - Lorient, 52 km)1. Santiago Botero, Colombia, Kelme, 1 hour, 2 minutes, 18 seconds.
2. Lance Armstrong, United States, U.S. Postal Service, 11 seconds behind.
3. Serhiy Honchar, Ukraine, Fassa Bortolo, 18 seconds.
4. Igor Gonzalez Galdeano, Spain, Once, 19 seconds.
5. Laszlo Bodrogi, Hungary, Mapei-Quick Step, 25 seconds.
6. Raimondas Rumsas, Lithuania, Lampre-Daikin, same time.
7. David Millar, Britain, Cofidis, 50 seconds.
8. Dario Frigo, Italy, Tacconi Sport, 1:34.
9. Andrea Peron, Italy, CSC Tiscali, same time.
10. Joseba Beloki, Spain, Once, 1:38.
11. Vjatceslav Ekimov, Russia, U.S. Postal Service, 1:41.
12. Tyler Hamilton, United States, CSC Tiscali, 1:56.
13. Marc Wauters, Belgium, Rabobank, 2:08.
14. Antonio Tauler, Spain, Kelme, 2:14.
15. Floyd Landis, United States, U.S. Postal Service, 2:21.
19. Levi Leipheimer, United States, Rabobank, 2:35
29. Oscar Sevilla, Spain, Kelme, 33 seconds.
43. Laurent Jalabert, France, CSC Tiscali, 3:33.
56. Richard Virenque, France, Domo Farm Frites, 4:23.
Overall standings, top 10:
1. Gonzalez Galdeano, 33 hours, 21 minutes, 23 seconds.
2. Armstrong, 26 seconds behind.
3. Beloki, 1:23.
4. Honchar, 1:35.
5. Botero, 1:55.
6. Peron, 2:08.
7. Millar, 2:11.
8. Rumsas, 2:22.
9. Hamilton, 2:30.
10. Jose Azevedo, Portugal, ONCE, 2:45.