Michael Landes was replaced by Justin Whalin at the end of season one.
The official reason was that he looked too much like Dean Cain. That was what had been said at the time by the studios. But a lot of rag papers claimed that it was because Michael Landes received more fan mail than Dean Cain, what was bad for the show, and so, they needed a better faire-valoir for the principal actor. That's pure gossip.
Some other papers claimed that he was replaced because of the lukewarm success of season one. They decided to make a lot of change in the series (Superman became a little more important in season 2 than in season 1 - there was some more romantic scene between Lois and Superman in the first half of the season 2, and between Lois and Clark in the second half,... they erased the character of Cat who was a little too sexy and funny for the new tone they wanted for the show, etc...), and apparently, they wanted to restructure the character of Jimmy, with a change in his way to act (less confident, a little more shy and careless...), and Michael Landes wasn't just adapted anymore at this new version.
The conclusion is that we'll probably never know why, but the facts remain that he was replaced. Justin Whalin played the role in the season 2,3 and 4, until the end of the show. I personnally prefer him than Michael Landes. He wasn't a good Jimmy Olsen.