If you mean "dynamically typed" languages, then it differs in that they do not have types.
>The fact that compiler is refusing to compile type-mismatching expression for a simple built-in types doesn't imply that it is "safer"
No, it does not imply that. It means that.
>Other languages, notably Lisp and Erlang will catch and signal the same error later, at runtime.
Precisely. So if that piece of code was not executed, you do not know that it is incorrect. If that branch is only followed rarely, your incorrect code is out there in production waiting to blow up when it finally does run that branch.
>I am not a Haskell guru, but what I see, especially in the case of Monads, is an implicit type-tagging with additional tag
The article in question does a good job of explaining monads.