I don't actually implement the Hashable conformance myself. But I think I may have found the problem: ForEach(daySets, id: \.self) is using the whole SetRecord (which is a SwiftData @Model), and somehow two are hashing to the same value. Changing this to ForEach(daySets, id: \.id) seems to have made the problem go away.
I say “seems,” because the problem has not been 100% reproducible (although it does repro fairly easily, and now I can’t get it to).
I would have assumed the Hashable implementation by PersistentModel incorporated the id, but I guess I can see why it might not.