>>が多すぎると言われたので全角で失礼。

do { v0 <- e0; v1 <- e1; ...; eN }

e0 >>= (\v0 -> e1 >>= (\v1 -> ... eN))
の略記。このことと、
x >>= f = concatMap f x
return x = [x]
guard b = if b then return () else mzero
mzero = []
を踏まえると、次のように変形できる。

do {x <- [1..10]; _ <- guard(x `mod` 2 /= 0); return x}
= [1..10] >>= \x -> guard(x `mod` 2 /= 0) >>= \_ -> return x
= [1..10] >>= \x -> (if x `mod` 2 /= 0 then [()] else []) >> \_ -> return x
= [1..10] >>= \x -> (if x `mod` 2 /= 0 then [()] else []) >> \_ -> [x]
= [1..10] >>= \x -> concatMap (\_ -> [x]) (if x `mod` 2 /= 0 then [()] else []
= [1..10] >>= \x -> if x `mod` 2 /= 0 then [x] else []
= concatMap (\x -> if x `mod` 2 /= 0 then [x] else []) [1..10]

見ての通り、mplusは無関係。