Hi Chris,
The main reason why we've created pmem_memcpy() was to avoid unnecessary flushes or fences when using non-temporal stores. Its performance might be better or worse than your OS memcpy() depending on various factors.
As you note, pmem_memcpy() is designed to be used for DRAM to PMEM transfers, but if you find it better for you workload, you can also use it as memcpy() replacement - it that cases, you should use PMEM_F_MEM_NOFLUSH flag.
Piotr