If you want a collection of items where you call a different overloaded method on each, you are either checking the type of each one manually, or you are doing something like this.
For your collection example, at some point you need to introduce some kind of polymorphism to get back to concrete types; but once you're back, overloading works just fine again. The best strategy to recover types depends too much on specifics to be formalized.
Generic functions in LISP are another way of doing this. It works at runtime, as well. And that leads to a good article in the elisp manual (https://www.gnu.org/software/emacs/manual/html_node/elisp/Ge...) that shows multiple dispatch being a runtime thing even way back. So, again, I'd be interested to know sources that said multiple dispatch was the same as method overloading.
I think I can see where overloaded methods were likely coopted by single dispatch statically compiled languages. But, honestly, I don't see how "multiple dispatch" would have ever made sense in those cases, either.
I'm somewhat goal shifting by pointing out that with this you can get dynamic behavior without a full recompile, but really only a little. The entire point of this behavior is that the link in to the method is statically known to a point that can then do another dispatch where it will go to the correct place.
The visitor pattern is a somewhat ugly way of accomplishing this, true. But it is absolutely more powerful than method overloading.
https://sourceforge.net/p/loki-lib/code/HEAD/tree/trunk/incl...