Copy and Paste program means two different things to me. One is that you stitch together other code examples to get a program. The other thing is that you are cutting/pasting a bunch of repetitive code and then slightly modifying it. I think to some degree we are all stitching together code examples, if not by cutting/pasting explicitly then by memory. On the cut and paste repetitive code thing, it is a cost versus reward. For a small amount of cut/paste or even a large amount if you do not have time to do it right, it may be worth doing the cut and paste....but in general at some point with a large amount this will come back to bite.
We all copy/paste programs. A lot of code is boiler plate and so are the algorithms. If you are writing quick sort, you did not invent it. Most likely you memorized a typical implementation from somewhere, either a lecture or a book. You are sort of copy and pasting programming. Sometimes you may read a paper where an algorithm is presented and implement the algorithm in the paper. To me this is copy paste programming as well. Additionally most libraries are full of example. Aka open a buffered reader in java BufferedReader br = new BufferedReader(System.out); I'm pretty sure I saw that code somewhere, and if not the code exactly....the basic structure/pattern with my own names replaced...... .NET is very good for having code examples throughout the library. If I want to open up a web page, I will look up the class for making web requests, and then mimic the code example. Sometimes you come back and tweak later (e.g. you need to set up timeouts) but in general you are basically going by example.
Overall, I would say most programs are sort of copy/paste programs. You start with core examples/algorithms/etc. taken from memory, books, etc. and then you modify to suit your needs. As long as you understand what you are stitching together I think it is fine. You don't need to understand everything you are cutting and pasting, exactly, just in general what it does and any functions. It is really just like using a library except you also have the underlying source code. It definitely pays to go to the right sources, and in general if you can get a feature from cutting/pasting from code examples, or a library...it is better to go with the library as that can be updated later.
The second thing is just cutting/pasting your own code. You have a bunch of repetitive code, so you cut/paste and modify. Large amounts of this make a mess to change, and also it is very boring and mind numbing... Sometimes the right alternative is to use another approach, but other times cut and paste is the best way to do what you want, in which case you should create a code generator to handle the repetitive code. But if it is just a few lines or a one off thing, it may not be worth it. Cut/pasting similar code is often quicker than coming up with a complex abstraction or creating a code generator. At the end of the day if cut and paste saves hours and you are under the gun to get a product out before your start up goes belly up, then do it. After all if you do not ship the code, you won't have a future. But basically this all becomes technical debt that should be cleaned up later. It's all about understanding the tradeoff you are taking and managing when it bites you. E.g. rush he project out today so you don't go out of business, then end up fixing it next week when the duplication makes adding that new feature too hard.....
Overall we all cut/paste mentally for examples/algorithms. And on the second type it is all about knowing when it is appropriate and when it is not...... Like any tool you need to understand the tradeoffs of what you are doing....