It's more accurate to say that it takes ownership of the captured environment. Whether that means copying the values or moving ownership depends on whether the values are of a type that implements Copy
Move and Copy are identical at the assembly level. The only difference is what you can do with the older binding. Semantically speaking, both cause a memcpy, though the optimizer may elide them.
That said, you're right that saying "copy" is misleading, for this reason. But moves _are_ a kind of copy.
https://doc.rust-lang.org/book/closures.html#move-closures