The spec says:
The [p:]message attribute can appear on any step invocation
But the spec isn't terribly clear about what a "step invocation" is. I don't think p:when, p:otherwise, p:catch or p:finally are steps that can be invoked, so I don't think the spec says that the message attribute should be allowed there.
On the surface, it might look like they should be allowed and they run when that container is selected. But it's not that simple. For a p:when, for example, does evaluating the test expression count as running? Even if it's false? And what should the context item be for the message expression?
Just say no. Putting the message on an actual step in the subpipeline is an easy workaround.