Knightley is horribly miscast in King Arthur. She is, quite honestly, the least convincing actor in the film.
What the role needed was someone who could play Guinevere a bit feral. Knightley comes across a bit too clean. And she's really haughty, or at least that's how she comes across.
I'm not sure whom I'd have cast in Knightley's place, however. It's easy enough to say in retrospect, "Oh, this person would have fit the part." I think she was cast because she'd worked with Bruckheimer previously on Pirates.
I like King Arthur a great deal, and I watch it every few months. (Clive Owen gets some great speeches in the film.) I think it should have done better at the box office than it did; the film should have been marketed to the audience that loved the Lord of the Rings films, but Disney (in this case, Touchstone) has never had a clue how to market their films.
If you like the film, I'd recommend Jack Whyte's Camulod Chronicles series or (and this will be much more difficult to find) Courtway Jones' Dragons Heirs series. The former uses the same basic idea -- Arthur as the last gasp of Roman Britain. The latter marries Malory to the 6th century, which does some interesting things as a consequence.