If you’re using a C# version lower than 5.0 (where this was fixed), this is the reason:
The lambda in your query captures the loop variable vowel.
Because Linq likes to use deferred execution, the value of this reference is not read until the query gets executed (by iterating over it), which is after the foreach loop has finished. At that point, the most recent value of vowel is u, which is why you get the unexpected output.
You can get around this by copying the value to another temporary variable (or by upgrading to C# 5.0).
Try this:
query = "Probably what you might expect";
foreach (char vowel in "aeiou") {
char currentVowel = vowel;
query = query.Where (c => c != currentVowel );
}