It's not just in CoD though. That problem also plagued Bad Company 2. It's in a lot of FPS games. It's just seems to be one of those little problems that are just kind of difficult to get rid of despite being seemingly easy to.
This really is a COD-issue. It's in pretty much every COD game since Modern Warfare because the netcode is atrocious.
Basicly every client tells the host what he is doing/has done and the host approves of this, regardless what any other client says.
So if Player A (Client A) sees Player B (Client B ) and shoots at Player B, the following can happen:
Client A to server: I see Client B.
Server: Roger
Client A to server: I shoot at Client B.
Server: Roger
Client B to server: I register shots being fired from Client A.
Server: Roger
Client A to server: I hit Client B and cause 75 damage.
Server: Roger
Client B to server: I receive hits by Client B and take 75 damage.
Server: Roger
Client A to server: I hit Client B and cause 35 damage. I kill Client B.
Server: Roger
Client B: I get into cover and have 25 health left.
Server: Does not compute, Client B. You were shot by Client A and received 35 damage. You are dead.
Client B: Well ... okay ... I guess.