List<Int> is a read-only view, not a snapshot. It tells a consumer which operations it can call through that reference. It promises nothing about the collection behind it staying the same.
Take val owned = mutableListOf(2, 4). The caller passes owned to a function that accepts List<Int>, then adds 6. If the function kept that same object, it now sees the 6 as well. val fixed the reference held by owned. The contents were never fixed.
So it depends on what the function needs. If it needs the values as they were at the call, the copy has to be made at a specific point and kept from being modified afterward. I'd make that boundary explicit in the signature or its documentation. If the function is meant to read the caller's current list, holding the shared object is fine, and a copy buys nothing.