About the patterns subsets and context, in every proyect (we use a UP approach) we have an standards artifact that addresses this, so in the whole project we have the same patterns, for example, for test description we will use this pattern, for design of this 'stereotype' analysis class we will use this pattern, for grouping of subsistems we will use this or that pattern.
Much of the realizing on which case you can apply which pattern is done by the functional arquitect (a higher profiled analist with extensive experience in design and patterns), so, as you pointed out, the key is the context of the pattern but the result is the uniformity of design pieces by different analysis units and the ability to read any model by understanding the patterns used in the project.
In regards to the desicion, merge issue, when using direct flow control in the activity you loose sight of the sinchronisation context of the flows: when splitting with a fork you have multiple sinchronic flows which must be re-sinchronized before continuing merged so we use a fork-join structure, when splitting with a desicion you have one active flow that has to decide on which path it should travel so when all paths merge they should do so in an asynchrony way using a merge (or inverse decision) element.
I agree it can be deduced which type of synchronization should be used by taking a look at the point where the flow splited, but in a large diagram with desicions and forks it can be pretty confusing.
Interruptions are a different case since they are treated like exceptions to the natural flow of the program so we also allow an exception to the rule here.
The quote about the guards wasn't mine so i won't answere it...
I hoped this last part has answered your question...