Contains/Does not contain conditions do not work well with multi-value fields because they translate to "if any of the values contains/does not contain X", so they always evaluate to true because the values are considered individually.
For ex, say you have a field with values A and B. A "Field contains B" translates to "either A or B is equal to B" and evaluates to true because B=B. "Field does not contain B" translates to "either A or B is not equal to B" and evaluates to true because A<>B.
Matches/Does not match <regular expression> will have the same behavior.
Workflow does not have conditions on (arbitrarily large) sets of values. You could work around it by flattening the multi-value field into a single value before checking if it contains the string you're looking for (so the condition turns into "if none of the values contains".

The activities above boil down to "wait for the field to change, get the current values, build a single string from the values by glue-ing them together with @ and use it to check if we're done. If not, go wait some more and do it again."
Things to note, you want to make sure Repeat is set to check the condition AFTER it executes the loop so you get the field values for a proper condition evaluation.