Of course errors are swallowed. Look at the type signature.
concat :: Foldable t => t [b] -> [b]
-- t = Either a
concat :: Either a [b] -> [b]
The error type "a" does not appear anywhere in the function's output type. In the event of an error, the only thing it could possibly produce as output is an empty list.
I don't think this means that Either's foldable instance is harmful and should be removed. It's a perfectly good instance that behaves in the "obvious" Maybe-like way. I do think this is an argument in favor of using a custom Prelude (which uses functions specialized to lists) when teaching new students.
Any Traversable instance should absolutely be Foldable, with foldMap = foldMapDefault, or an optimized version that produces the same result. Putting `foldMap = error ...` for any Traversable is out of the question, imo.