How can I copy data from an external HDD that is about to fail?
I would try using rsync from the command line.
rsync -av --ignore-errors /Volumes/failingDrive/ /Volumes/brandNewDrive
should do the trick. Mind the trailing / at the end of the source. Rsync will not copy files it finds on the destination, so if you call it a second time it will continue where it left off.