Joel and Ethan Coen:
To round out the cast [of No Country for Old Men] we hired we thought rugged everyman Jim Brolin as Llewelyn Moss, the aging Vietnam vet caught in the middle.
Well, there were some red faces on the set the first day of shooting when Jim Brolin's son Josh showed up to play the part. In retrospect, this explained agent Michael Cooper's surprise on hearing we wanted his client for the coveted role. Too late now, though the contracts were all signed.
How could Josh Brolin plausibly be a Vietnam vet? Simple: set the story in 1980 instead of the present day. [source]
Similarly, the producers of Heroes thought they hired James Ramamurthy to play Chandra Suresh.