Pretty much everyone hates the Monoid instance for Data.Map. If you're not too terribly opposed to potentially breaking existing code to make future users happy, you can avoid the problem here.
class Semigroup1 f where
(<<>>) :: f a -> f a -> f a
instance (GCompare k, Semigroup1 f) => Monoid (DMap k f) where
mappend = unionWith (<<>>)