Я не могу точно сказать вам, почему это происходит (мне самому любопытно). Но это работает для меня:
a {
display: block;
background: #000;
line-height: 40px;
}
img {
vertical-align: middle;
margin-top:-4px; /* this work for me with any given line-height or img height */
}