Bo figcaption jest przezroczyste tylko wtedy, gdy kursor jest na obrazku. W chwili, gdy dostanie display: block, kursor nie jest już dłużej na obrazku tylko na samym figcaption, stąd jest aplikowane opacity z figure figcaption.
+ jak bez dodawania kolejnych divów zrobić, żeby na opacity działało transition podczas gdy kursor już nie najeżdża na obrazek?
Nie używać nieanimowalnego display tylko pobawić się visibility.