• my 2 cents...

    Estimated and actual rows are significantly different all over the place. I'd re-run an update statistics with full scan.

    Estimated IO costs seem significantly higher for TempDB. Have you looked at if there's any contention there - sys.dm_os_waiting_tasks?