The man page for cp is grossly inadequate, especially for the recursive copying.
-R, -r, --recursive
copy directories recursively
Please read the full documentation here: it has 50 lines of detailed explanation, so you probably need to read it several times.
https://www.gnu.org/savannah-checkouts/gnu/coreutils/manual/html_node/cp-invocation.html
cp is a mess. Even for simple cases, it does different things when the destination does not exist, or exists as a file, or exists as a directory, or has various permission settings.
cp -r is a different (and worse) mess. It refuses to run unless the source is a directory. If it does run, it recurses through a complete subtree creating directories and files (including file types like fifos and sockets), and there are no options that modify or limit its scope.
cp -r will obey its own options, regardless of how much you might dress it up inside find or xargs. Your wrappers merely send it a single directory name, and it will obediently replicate the entire directory/file subtree rooted at that directory.
The only cp option that accepts a variable number of args (as permitted in -exec or xargs) is cp -t, where the target is validated as a directory. And right now, I don't even trust that to behave itself if any of the following source args are directories, or soft links, and/or in conjunction with a -r option.
As of now, I believe the only safe version of cp is cp -t target src1 src2 src3 ..., where I have also previously verified that target is a writeable directory, and each src is a readable regular file.
Section 2.6 Target Directory of the full document (noted above) lists at least four ways that cp -t can fail, or do something other that what your command clearly intended. The same issues arise with the mv command, which pretty much does what cp does, but then deletes the original files so you cannot have another try at getting it right. Frequent backups (like tar on the whole of the original directories) have saved my job more often than I care to admit.