You can have a table-cell element inside a table-cell?
Might work today, though I know it would not have worked a few years ago when browsers like FF and Safari would throw hissie fits if you didn't have this level of layers:
display: table grandparent
display: table-row parent
display: table-cell children
...and now looking at it, since images are inlines, the span could probably be removed and its styles given directly to the img.
What ronpat is doing by making the inlines inside the td also table-cell is letting the td act more like a table-row and now the two children inside (span and p) will want to equalise their heights like table-cells tend to do.
I'm trying to find the old demo of Paul's which had a text string next to an image, but I think indeed that one only worked if the text couldn't wrap, because it centered using line-height.
When it is longer than one line then the whole SPAN goes under the image.
It wants to not wrap. Though you don't want to set dimensions on the td or the table, depending on your content you might be able to get away with setting a max-width on your text element (which would force a wrap, hopefully before the text string is long enough to drop under the image).