Потому что ваш элемент при событии hover становится шире на 6 пикселей (3 слева + 3 справа).
Варианты решения:
1 используйте вместо border свойство outline - оно не добавляет размеров и рисуется новым слоем
2 добавьте border вашему элементу (без hover) такой же толщины, но прозрачный или цвета фона. Тогда при наведении будет меняться цвет бордера, а размер не изменится.