I have looked but cannot find anything definitive about a default type for a collection. A lot of documentation refers to adding objects to a collection, but also says that the collection itself can contain different types. That and the fact that in your procedures, one added data from a string variable (which worked) while the other added the same data from a variant. If coercing the variant to a string (CStr) or declaring the faulty variable as a string fixed the problem, it seems logical that the collection default type is an object.
For what you're doing, have you considered using a dictionary object? Apparently keys are more useful.