Hmmm...
It seems that the File constructor replaces "/Users/username" at the beginning of paths with "~" and XMPFile does not like paths that begin with "~". Changing the XMPFile call seems to fix it:
> var xmpFile = new XMPFile(psdFile.fullName.replace("~", "/Users/username"), XMPConst.FILE_PHOTOSHOP, XMPConst.OPEN_ONLY_XMP);
... not nice!!!!