Il suo primo casting professionale fu in Stranger at My Door (1991), anche se aveva recitato in commedie per bambini da quando aveva quattro anni. Il film del 1993 L’uomo senza volto, co-protagonista di Mel Gibson, ha contribuito a dare impulso alla sua carriera all’età di 13 anni. L’anno seguente, ha avuto un ruolo di supporto nel film corale Safe Passage. Nel 1996, ha interpretato il ruolo di Puck nell’opera A Midsummer Night’s Dream di Benjamin Britten al Metropolitan Opera di New York. Nel 1998 ha interpretato un giovane soldato condannato durante la seconda guerra mondiale nel Pacifico in La sottile linea rossa. Ha ottenuto di nuovo il successo di critica e botteghino con il suo ruolo nel film del 2001 In the Bedroom, con Sissy Spacek nel ruolo di sua madre. Ha ottenuto un altro successo al botteghino in Terminator 3: Rise of the Machines (2003) come John Connor (sostituendo Edward Furlong in Terminator 2: Judgment Day), co-protagonista con Arnold Schwarzenegger e Claire Danes. Nel 2003, ha recitato nella serie HBO Carnivàle, che ha attirato un pubblico fedele e recensioni entusiastiche. Lo show è durato due stagioni, terminando nel 2006.
Stahl ha interpretato due cattivi con buone recensioni: Bobby Kent nel film Bully (2001) e Roark Jr./Yellow Bastard in Sin City (2005). Stahl non ha ripreso il suo ruolo di John Connor in Terminator Salvation, che è stato sostituito da Christian Bale. Stahl ha notato il concetto del film come “un salto nel futuro, quindi sarà un po’ più vecchio”. Altri ruoli includono How to Rob a Bank (2007), Sleepwalking (2008), e Quid Pro Quo (2008).
Nel 2010, Stahl ha interpretato Max Matheson in Mirrors 2, il sequel di Mirrors, diretto da Victor Garcia e scritto da Matt Venne. Tra i suoi film più recenti ci sono On the Inside (2010) e Afghan Luke (2011), e Away from Here (2014).
Nel 2019, Stahl ha interpretato il serial killer Glen Edward Rogers in The Murder of Nicole Brown Simpson. Le riprese sono iniziate nell’estate del 2018 e il film è uscito nel Regno Unito il 9 dicembre 2019. Il film era basato sull’affermazione di Rogers che lui stesso aveva ucciso Nicole Brown Simpson invece di O. J. Simpson, l’ex marito di Brown e il principale sospettato che era stato precedentemente processato e assolto per l’omicidio nel 1995. Il film è stato ampiamente stroncato dalla critica.
Nel 2019, Stahl è apparso nel cortometraggio dei The Lumineers, III, che è basato sul loro nuovo album. Stahl ha interpretato il personaggio Jimmy Sparks, che è un padre e dipendente dal gioco d’azzardo.