I got this working. The body content of "h:outputText" isn't used for anything useful. I know that now. Putting body content on the tag only serves to confuse. I would have thought a tag library validator could emit a warning or error that body content on that tag isn't useful.
This a a basic of JSF. Switch to JSF 1.2 or use facelets to have a plain html working as h:output text value.