I'm not sure what bg-warn and bg-light are, since they're not in your dictionary.
You can only do boolean subtract on an entire filter run -- not inside a run.
So this might work for the first part:
[[My Alert Class Dictionary]indexes[]addprefix[alert-]]
If you just wanted to remove warn and light, then maybe this:
[[My Alert Class Dictionary]indexes[]!prefix[warn]!prefix[light]addprefix[alert-]]
Whenever a TW filter has a title list, it compresses it (eliminates duplicates), so I imagine that it may also incidentally sort the results. I haven't looked at the code, but if it was me I would just use javascript's ability to eliminate duplicates, then pull out the unique values. That might imply that sorting would be dependent on which browser you used, since different javascript engines might have internal differences.
-- Mark