Ok I peeked into the C SDK source code and I think I found the problem.
In twWindows.c, function twDirectory_MoveFile there is this line:
res = MoveFileExW(from, to, MOVEFILE_REPLACE_EXISTING | MOVEFILE_WRITE_THROUGH);
Windows SDK documentation says:
When moving a file, the destination can be on a different file system or volume. If the destination is on another drive, you must set the MOVEFILE_COPY_ALLOWED flag in dwFlags.
Since ThingWorx uses C:\opt\... as a temporary storage for file transfers and then moves the file when completed, the move will fail as it's on another volume and the flag has not been specified, thus the reason why all transfers to a non-C: volume fail.