Son premier casting professionnel est dans Stranger at My Door (1991), bien qu’il ait joué dans des pièces pour enfants depuis l’âge de quatre ans. Le film L’homme sans visage (1993), avec Mel Gibson dans le rôle principal, a contribué à relancer sa carrière à l’âge de 13 ans. L’année suivante, il tient un second rôle dans le film d’ensemble Safe Passage. En 1996, il a joué le rôle de Puck dans l’opéra de Benjamin Britten, Le Songe d’une nuit d’été, au Metropolitan Opera de New York. En 1998, il a joué le rôle d’un jeune soldat condamné pendant la Seconde Guerre mondiale dans le Pacifique dans The Thin Red Line. Il remporte un nouveau succès critique et au box-office avec son rôle dans le film In the Bedroom (2001), dans lequel Sissy Spacek joue le rôle de sa mère. Il remporte un autre succès au box-office dans Terminator 3 : Rise of the Machines (2003) dans le rôle de John Connor (remplaçant Edward Furlong dans Terminator 2 : Judgment Day), aux côtés d’Arnold Schwarzenegger et de Claire Danes. En 2003, il a joué dans la série Carnivàle sur HBO, qui a attiré un public fidèle et des critiques élogieuses. La série a duré deux saisons et s’est terminée en 2006.
Stahl a joué deux méchants qui ont reçu de bonnes critiques : Bobby Kent dans le film Bully (2001) et Roark Jr./Yellow Bastard dans Sin City (2005). Stahl n’a pas repris son rôle de John Connor dans Terminator Salvation, remplacé par Christian Bale. Stahl a indiqué que le concept du film était « un saut dans le futur, il sera donc un peu plus âgé ». Il a également joué dans How to Rob a Bank (2007), Sleepwalking (2008) et Quid Pro Quo (2008).
En 2010, Stahl a joué le rôle de Max Matheson dans Mirrors 2, la suite de Mirrors, réalisé par Victor Garcia et écrit par Matt Venne. Parmi ses films plus récents, citons On the Inside (2010) et Afghan Luke (2011), ainsi que Away from Here (2014).
En 2019, Stahl incarne le tueur en série Glen Edward Rogers dans The Murder of Nicole Brown Simpson. Le tournage a commencé au cours de l’été 2018 et le film est sorti au Royaume-Uni le 9 décembre 2019. Le film était basé sur l’affirmation de Rogers selon laquelle il avait lui-même tué Nicole Brown Simpson au lieu de O. J. Simpson, l’ex-mari de Brown et le principal suspect qui avait déjà été jugé et acquitté pour le meurtre en 1995. Le film a été largement critiqué par les critiques.
En 2019, Stahl est apparu dans le court-métrage de The Lumineers, III, qui est basé sur leur nouvel album. Stahl a joué le personnage de Jimmy Sparks, qui est un père de famille et un accro au jeu.
.