After a slug of bourbon and some more digging I think I found the problem. Hot NAT on NAT action, which PHP ftp doesn't necessarily play well with UNLESS you set this flag - FTP_USEPASVADDRESS - to false immediately before making the connection pasv.