I just noticed that if you try to merge with a dirty subrepository, the merge dialog has the merge button and tells you that there are local changes and that you can merge, shelve or discard those changes.
If you open the shelve, you will only see the changes to the top repo, but there is no mention of the dirty subrepo.
Even if shelve does not (yet?) support subrepos, the fact that the dirty subrepos are not at least mentioned is confusing. You can shelve all the local changes that you see on the shelve dialog, but when you close the dialog and go back to the merge dialog its merge button is still disabled, which seems like a bug until you notice that there is indeed a dirty subrepo.