Why getResponse() breaks your first attempt
The mental model most people arrive with: the form gives you a File object, you call moveTo() on it, done. What actually comes back from itemResponse.getResponse() on a FILE_UPLOAD item is an array of Drive file ID strings. Not File objects. Strings. Even if only one file was uploaded, you get a one-element array like ["1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs"].
That ID string is just text. Calling .moveTo() on a string throws a TypeError immediately, which is why the trigger appears to fire but nothing moves. The fix is a single hop through DriveApp.getFileById() to get a proper File object before you touch it.
The first time I hit this, I spent twenty minutes checking folder permissions before reading the error message carefully. 'Cannot call method moveTo of undefined' is the giveaway that you're still holding a string.