Two things worth knowing before swapping one for the other: List.copyOf rejects null elements with a NullPointerException, so a list with nulls that used to pass through unmodifiableList fine can start failing at the copy. And when the argument is already an immutable list from List.of or List.copyOf, it returns the same instance instead of copying, so defensive copies at every layer cost almost nothing.
Stream.toList() from Java 16 sits in between: unmodifiable, but it does allow nulls.