Как ведет себя блочный img?
Видимо потому, что по спецификации дефолтное значение ширины у любого элемента (включая блоки) - auto, а отнюдь не 100%. У картинки auto свое, у текстового потока свое. Но никто не мешает прописать 100% вручную.
Она расширяется как-бы, но картинка это inline-replaced элемент, и она рисуется в соответствии со своими размерами, а остальное пространство забивается margin-ом.
Display: block не обозначает что элемент расширяется на всю ширину. Он занимает столько места, сколько внутри у него есть контента (или фиксированная ширина), а следующий за ним элемент переносится на новую строку.