URL mappings are hit in the order they are declared, so put your catch all /**
last.
EDIT: This answer tickled at the back of my mind, and I recalled something I read on the mailing list a while back. Back in Grails 1.1 or so, URLMappings were evaluated in the order declared. Now, however, URLMapping matching is slightly more complex. The URLMappings will try to return the best match by comparing the number of wildcards, static tokens, and finally number of constraints. You can see this in the source.
Since URL mapping order no longer matters, it must be something else (although I find listing them in rough order makes it easier to read through them). It looks like the second fragment should actually be a static token. I'd try /static/image/$imageNumber
.