I've not looked at the code behind the scenes but I suspect it copies one row at a time using 1 Insert/Values statement per row and that would take almost as long if you weren't making the change from VARCHAR(MAX) to NVARCHAR(MAX).
Also remember that not only are you doubling the size, but any rows that happen to fit "in row" in the cluster index are also doubling in size, creating more "Trapped Short Rows" in the process and that wastes a huge amount of space and makes "normal" scans take sometimes 10s (or worse) of times longer.
If most of the rows have such LOBs, consider forcing them out of row and assigning a single space as the default to prevent "updates" from NULL to something causing massive page splits because of the change from null to a 16 byte pointer.
And, again, I'd wouldn't trust the migration tool to be your friend performance wise. Consider writing your own transfer.