Как правильно затемнит картинку при наведении?
Вам нужно изменять не background, а применять фильтры https://html5book.ru/css3-filtry/
Чтобы не "прыгало" замените width на max-width для картинок и padding на margin у .image-portfolio
p.s.
Еще нужно пересмотреть структуру. Очень много лишних div. 
И для картинок с подписями отлично подходят теги figure и figcaption.
Посмотрите в сторону фильтров. Вот хороший материал на эту тему с живыми примерами - paratapok.ru/frontend/4668_css3-filtry