I have the following code:
The result is:
It's because your text is already escaped. The escape="false" doesn't unescape text. It just prints the text as-is instead of escaping it. However, as your text is already escaped from beginning on, it appears in escaped form. Remove the escape="false" and you'll see that it will be double-escaped. I.e. every & becomes &.
You need to unescape it beforehand. The Apache Commons Lang StringEscapeUtils may come handy.
String unescapedShortDescription = StringEscapeUtils.unescapeXml(shortDescription);
Then, you can use <h:outputText escape="false"> to print it as-is.