Особенности в теории относительности ))
Verical-align для блочных элементов работает относительно "базовой линии" родителя. И для того чтобы этим параметром пользоваться родителю нужно задавать не font-size, а line-height
.box {
border: 1px solid red;
height: 100px;
line-height: 100px;
}
span {
vertical-align: middle;
font-size: 20px;
}
Подробнее о vertical-align