Update: seems like this workaround is pretty solid...
my $file = Win32::GetShortPathName($scpfile->Text());
$file =~ /(.*\\).*$/;
print "CD to $1\n";
Win32::SetCwd($1);
Not the prettiest bit of code, but I wanted to see if the cwd could be to blame. I still don't get why I have this problem in the first place; I pass the absolute path to the file (works from a direct command line incantation of pscp). This workaround means I have to send the absolute path to pscp now, but no biggie there. If anyone can explain what I ran into with this, please let me know!!