Why do I sometimes experience a delay despite a very low ping?

This is because the netcode is written to "favor the attacker".

This video explains it in detail with examples:

To give a very brief synopsis, everything you see is 20ms behind what the server knows, so everything you see about the game is some past state of the actual game. If you fired exactly where the enemy appeared to be, you'd miss some of the time because on the server the enemy would have already moved elsewhere in that time. So what "favor the attacker" means is that, if it looks like you're shooting at the enemy on your screen, then you are shooting at that enemy, even if he's somewhere else by the time the shot actually would take place on the server.

This is compounded by the fact that the enemy is also seeing things in the past, so when you shoot him, he may be clearly visible on your screen, but already well around a corner on his own screen. Since we "favor the attacker", the attack still hits.

This is something to be aware of when you're playing; you just have to be even more on edge to get to cover as fast as possible rather than waiting to duck behind at the last second.

See the video for a much more technical and interesting explanation than this summary.