Sorry for not checking the updated code. Let me take another look at it.
EDIT: Unfortunately, I cannot reproduce the large difference in speed using your code snippet and get:
copy
is_contiguous: True
dt: 28.643369674682617

no copy
is_contiguous: False
dt: 27.836084365844727

copy
is_contiguous: True
dt: 37.908315658569336

no copy
is_contiguous: False
dt: 28.136253356933594

copy
is_contiguous: True
dt: 28.306961059570312

no copy
is_contiguous: False
dt: 27.74810791015625

copy
is_contiguous: True
dt: 29.030799865722656

no copy
is_contiguous: False
dt: 28.918027877807617

copy
is_contiguous: True
dt: 29.46949005126953

Note that the very first CUDA operation would initialize the CUDA context and should thus be removed from the profile. Also, warmup iterations are usually also needed, as your GPU might be in an IDLE state and even after the context was already initialized, the first op might use a bit more time.
Could you add more iterations to it and check, if the number stabilize?