I'd guess it's because of the 'prefixer' used. ie the function used to determine the region extents of the word behind the cursor.
It probably sees just the ':' as the prefix.
You know what?
I'm figuring that colon is used to differentiate between snippets and completions in the completions drop down list (ctrl+space) and is not part of the tab target.
What is interesting is that the text.xml scope has long-tag and short-tag snippets and the tab targets for those do include a trailing colon. Yet those don't trigger. In source.groovy's completions drop down list there's "::" "key value pair (hash) and "!:" "assert" and others that do not include a trailing colon in the snippet's tab target yet they don't fire on tab either.
I think the problem lies in some ST2's function not recognizing non-alpha-numeric characters as tag triggers.
So, definitely a bug.