You're writing 17,000,000 rows in 40 mins,
which equates to 425,000 rows per minute.
What hardware are you using ? This isn't bad performance on 6 year old kit ;-) Is it new ?
Are you using SANs ? (if you're not then skip this most of this)
You've got quite a bit of physical IO at 339,973 pages. SAN speeds, in my experience vary from 0.5ms to 10ms for a single page - depending on how much your company overloads the SAN, what tier your data is on and what time of day it is.
At 4ms/read which isn't too bad for a SAN is a large company which doesn't care about overloading its disk, means the reads will take 1356s - so 24mins. If you're doing it at a busy time of the day then I've seen 8ms for a page read which is 48mins.
Try clearing the source table from the cache and run a select count(*) from table with statistics io, time on. What performance are you getting ?
In my experience SANs are always overloaded and no one cares - the only solution I've found is to buy a machine with huge amounts of RAM or buy your own SAN.
Also if you're using multi-tiered SAN, I'd recommend repeatedly running selects on your prime tables to get the SAN to move the data up the tiers - run this every day.
If you're not using SAN then also run the select(*) so we can see the performance.
When you're writing to SANs you write to the SAN cache synchronously so its very quick *much quicker than direct disk (the write to the disk is async -so we don't care).
If you've got direct disks, then we need to look at how they're set up.