This is difficult to tell without analyzing the code. I can't provide you an authoritative answer, but perhaps some guidance on how to make this decision will do.
In a situation like this, the first thing I would do is diff the code in each of the methods. A general purpose diff tool like KDiff3 allows you to paste code into two different panels for an ad hoc comparison.
If you don't notice any differences across all of the sub classes — that is, the are absolutely no differences — then I would agree that this is paranoia. Kilian's comment is probably spot on. Some time ago some nasty bug surfaced in that code and it was a big deal. Now developers are told to copy and paste without touching it to appease someone. I would say this is the least likely case.
If you notice slight differences from one class to another, then this copied and pasted code likely represents a lot of hard-won lessons. Don't be fooled by similar looking code. It's the little differences that make all the difference. Even if 90% of the code is the same, the 10% that is different can justify code duplication.
Don't get to hung up on the DRY principle here. Eliminating code duplication is not the goal. Most principles, architectures, and nebulous "best practices" aim to reduce bugs, make code easier to test, and enable code to evolve without requiring every use case to be retested. This requires copying and pasting code more often than you think.
DRYing up your code can introduce coupling between components and use cases that shouldn't know about each other. A subtle shift in the logic needed for one sub class could wreak havoc on other sub classes, which would require retesting parts of the application that shouldn't need to be tested. This might be the reason for the rampant copying and pasting.
The trick with eliminating code duplication is to identify a good abstraction and give it a good name. The abstraction should simplify the consuming code and make it easier to understand. If it doesn't, then consider renaming things until consumers of the abstraction are simpler, or admit it isn't helping, and just copy and paste the code. If you do create a new class, make it testable, and actually test it.
If analyzing code isn't giving you any satisfaction, consult version control. Look at the history of these classes, especially the old ones and the base class. I bet if there was some nasty bug a while back you'll notice a commit or two about it. With any luck that commit will have a person's name, and the id of a work item in it. If the author of that commit still works there, send them an email, instant message, or walk up to them and ask. Try looking up the work item to read through the comments. Failing that, find the person who has been there the longest, perhaps even someone from production support, and ask them. Production support folks tend to remember the really nasty bugs.
Unfortunately, strangers on the Internet can't answer this for you. The best you can do is go on an archeological dig through the code and version control, and ask people.
I suspect you'll find differences between these methods across sub classes, but not consistent enough differences to pull this logic into its own class. That's just my intuition speaking, though. If this is the case, inheritance introduces coupling between components. This implies the logic for all derived classes must evolve at the same time and for the same reasons. If this is not true, then eschewing inheritance in favor of copying and pasting makes sense, even if it is annoying.