Это имеет много общего с ковариацией, например, общие типы рассматриваются как параметры, и если параметры не будут корректно разрешены для более определенного типа, тогда операция завершится с ошибкой. Следствием такого является то, что вы действительно не можете использовать более общий тип, такой как объект. И как указано Rex, объект List не будет конвертировать каждый объект для вас.
Вместо этого вы можете попробовать ff-код:
List<string> sl = new List<string>();
//populate sl
List<object> ol = new List<object>(sl);
или:
List<object> ol = new List<object>();
ol.AddRange(sl);
ol (теоретически) скопирует все содержимое sl без проблем.