A problem I'm seeing with a LOT of this discussion is the lines being blurred between HTML "level" and CSS "display" -- while the display state on MOST block level and MOST inline-level elements line up with their CSS display state, that is NOT what they mean and they are NOT the same thing!
HTML Block level containers exist to break flow text into subsections -- that's it. A heading section, a paragraph section. Inline-level containers exist to say what small elements are (ABBR, STRONG, EM, SAMP, KBD for example), add behaviors to those elements (A), or provide hooks for style that we lack a proper semantic tag for (SPAN, B, I). Inlines are 'inline with flow', blocks 'break flow' dividing it up, this is why a block level element can't go inside inline-level. It's part of making sure we have logical document structures; NOT that most people bother even trying to use any of the tags properly which is why you still see people sleazing out HTML 3.2 with a 4 tranny doctype on it, and why HTML5 is like a trip in the wayback machine to 1998 so far as improvements go. GOD FORBID we have rules and be expected to follow them.
The CSS 'display' property is JUST presentation for whatever device you are targeting, and has absolutely NOTHING to do with HTML Level apart from the default appearance.
.. and if you are choosing your tags based on their default appearance, you are most likely choosing the wrong tags! That's not what HTML is for or how it's supposed to WORK, because HTML is NOT about what it looks like -- it's about saying what things are and letting the user agent (browser) best figure out how to show it within the limitations of the target device, be it a printer, a teletype, a handheld screen, a desktop screen, whatever.