I've run into the same problem. Copy-Item seems to be a bit buggy. It behaves very differently depending on whether the destination exists or not. So, for instance if I have a folder c:\test\a that contains a text file:
Copy-Item c:\test\a c:\test\b -recurse
if c:\test\b does not exist, it will be created, and its contents will be identical to c:\test\a.
if c:\test\b does exist, a copy of c:\test\a will be created inside c:\test\b.
On the other hand:
Copy-Item c:\test\a\* c:\test\b -force
works fine for either case. But, now suppose that c:\test\a has a sub-directory called aa. If you run the same command, and b does not exist, it will create b and just copy over the file contents of a. But if b does exist, it will copy over the file contents, and create any top-level sub-directories. And it gets even weirder if you use -recurse. In that case, If b does not exist, instead of copying the directory structure, it will copy all the files in the tree to the root level of b.
Weirdness. I think the only solution is to check beforehand whether the target location exists using test-path, then adjust your copy call accordingly.