did you try addMessage without the first parameter?
I tried the following too. But Still the message is not displayed. The modal panel comes as empty.
fc.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(),
i have the same code as you, it works for me. the differents is my rich:message has more detail.
Are you sure there is not another request sended after the action?
I have some 3 methods throwing exception and each has a similar catch blocks. They all are within the same a4j:commandButton's action, which would be the same request.