Можно ли выровнить картинку по вертикале в псевдоэлементе:before, если картинка задана как content: url('img.png');?
Зачем изобретать велосипед?li:before {
  content: '';
  position: absolute;
  width: 40px;
  margin-left: -40px;
  background-image: url('img.png');
  background-position: center;
  /* background-repeat: no-repeat; - оционально */
}
А высота картинки строго определена? Если да то top:50%; margin-top:- половина картинки.