Just a thought,
But can't you not just create a new filegroup on another disk (new datafile) and assign the next range partition to the new filegroup.
Then set a new boundary so new data will be pushed to the new filegroup.
That way the data can stay where it is and new data can be filled in the nex datafiles (from the new filegroup)
ALTER PARTITION SCHEME [ps_YourpartionRange] NEXT USED [YouNewFileGroup]
ALTER PARTITION FUNCTION pf_YourpartitionRange() SPLIT RANGE (YouNewMaxUpperBoundary)
This should be very fast as there is no data moved beside the new loads that are coming in.