List<Int> всего лишь представление только для чтения, а не снимок. Он сообщает потребителю, какие операции доступны через эту ссылку. Что коллекция за ним останется прежней, он не обещает.
Возьмём val owned = mutableListOf(2, 4). Вызывающий код передаёт owned в функцию, принимающую List<Int>, а потом добавляет 6. Если функция сохранила тот же объект, теперь она видит и 6. val зафиксировал ссылку в owned. Содержимое не фиксировалось никогда.
Так что всё зависит от того, что нужно функции. Если ей нужны значения на момент вызова, копию надо сделать в определённой точке и не дать её потом изменить. Эту границу я бы обозначил явно, в сигнатуре или в документации. Если функция должна читать текущий список вызывающего, хранить общий объект нормально, а копия ничего не даёт.