При display: table по-умолчанию ширина блока подстраивается под ширину контента.
В случае с display: block - по-умолчанию блок растягивается на всю ширину.
Поэтому в случае с display: table - margin: 0 auto работает и центрирует блок по горизонтали. если вопрос в этом, конечно :)
Если хотите использовать display: block, нужно явно указать width либо max-width:
https://jsfiddle.net/dx2poLwk/
Либо вообще посмотрите в сторону display: flex.