Su primer casting profesional fue en Un extraño en mi puerta (1991), aunque llevaba actuando en obras infantiles desde los cuatro años. La película de 1993 El hombre sin rostro, coprotagonizada por Mel Gibson, ayudó a impulsar su carrera a los 13 años. Al año siguiente, tuvo un papel secundario en la película de conjunto Safe Passage. En 1996, interpretó el papel de Puck en la ópera Sueño de una noche de verano, de Benjamin Britten, en el Metropolitan Opera de Nueva York. En 1998 interpretó a un joven soldado condenado durante la Segunda Guerra Mundial en el Pacífico en La delgada línea roja. Volvió a tener éxito de crítica y taquilla con su papel en la película de 2001 En el dormitorio, protagonizada por Sissy Spacek como su madre. Consiguió otro éxito de taquilla en Terminator 3: Rise of the Machines (2003) como John Connor (sustituyendo a Edward Furlong en Terminator 2: Judgment Day), coprotagonizando con Arnold Schwarzenegger y Claire Danes. En 2003, protagonizó la serie de la HBO Carnivàle, que atrajo a una audiencia fiel, así como críticas muy favorables. La serie duró dos temporadas y terminó en 2006.
Stahl ha interpretado a dos villanos con buenas críticas: Bobby Kent en la película Bully (2001) y Roark Jr./Yellow Bastard en Sin City (2005). Stahl no repitió su papel de John Connor en Terminator Salvation y Christian Bale lo sustituyó. Stahl señaló que el concepto de la película era «un salto al futuro, por lo que será bastante mayor». Otros papeles fueron Cómo robar un banco (2007), Sleepwalking (2008) y Quid Pro Quo (2008).
En 2010, Stahl protagonizó el papel de Max Matheson en Mirrors 2, la secuela de Mirrors, dirigida por Víctor García y escrita por Matt Venne. Entre sus películas más recientes están On the Inside (2010) y Afghan Luke (2011), y Away from Here (2014).
En 2019, Stahl interpretó al asesino en serie Glen Edward Rogers en El asesinato de Nicole Brown Simpson. El rodaje comenzó durante el verano de 2018 y la película se estrenó en el Reino Unido el 9 de diciembre de 2019. La película se basó en la afirmación de Rogers de que él mismo había matado a Nicole Brown Simpson en lugar de O. J. Simpson, el exmarido de Brown y el principal sospechoso que había sido juzgado y absuelto previamente por el asesinato en 1995. La película fue ampliamente criticada por la crítica.
En 2019, Stahl apareció en el cortometraje de The Lumineers, III, que se basa en su nuevo álbum. Stahl interpretó al personaje Jimmy Sparks, que es padre y adicto al juego.