Thanks for your thoughtful answer. If you don't mind I'd like to dig into your points a bit further.
Nit: the question here is not whether CoW makes sense, since that is just an implementation technique for value semantics, but whether copyable value semantics makes sense.
“FileHandle” is a bit open-ended semantically, unless you mean a specific one like the one in Foundation—which I will note is not ~Copyable, and I don't think that fact has been a major pain point for anyone.
But we can analyze the question in general:
There are two obvious ways to view a FileHandle as a value:
- Its value is just the identity of the open file in the process, like a file descriptor. The file's contents are an incidental value to the
FileHandle. In this case, it's like a wire attached to an antenna through which I/O occurs. You can make as many copies of the wire as you want and they all make sense. If the existence of the FileHandle does not prevent other processes from writing the file this is probably the only correct view.
- Its value is the contents of the file. This view only makes sense if the existence of the
FileHandle prevents other processes from writing the file
- If the file is only open for reading, there's no point in restricting copies. Each copy is semantically access to a copy of the same data.
- If the file is open for writing, you could say that the
FileHandle's value is really the data stored in the file from which it was created. Mutating the value of a FileHandle with no existing copies could semantically update the file. The copies then could then become semantically disassociated from the file (possibly to be associated later with another file).
The 2nd view above is admittedly not very much like the abstraction we think of as a file handle, but it's worth asking whether file handle is an abstraction we should use. 
Thanks for your checklist.
- Has mutable state and doesn’t semantically make sense to have multiple owners
Nit: the real question is whether multiple copies make sense. What kinds of values don't make sense to copy? Sean Parent has often told me every value can be copied; it's just a matter of how you define the value. In that view, for example, a copy of a mutex is just a disassociated unlocked mutex, and all mutex values are equal (literally, ==).
Has a meaningful identity such that CoW doesn’t fit well
I've never been able to make a “has a meaningful identity” determination by thinking critically. To me it seems entirely subjective. Can you shed any light on this?
Is intended for performance critical domains where reference counting + uniqueness checks may not be tolerable
Some of the most-cited uses of noncopyable types are for access to OS level I/O resources, but the cost of creating/destroying a class instance is usually in the noise compared to the underlying cost incurred by the OS.
Setting those aside, the cost of reference-counting is not an issue if you never actually copy the thing (and on some processors no worse than a non-atomic increment when non-contended). The cost of uniqueness checks is irrelevant if the thing has only immutable data and very low otherwise (because false negatives are OK you can used more-relaxed atomics). So where is this an actual problem?
Non-Sendability is indeed a smell, but could just be telling us it should be a copyable struct. Some of us would argue we should never use (mutable) classes except as implementation details of types having value semantics 