One other item on above .... when it's running, the parent shell is...
weave 31357 31352 1 22:28 ? 00:00:00 sshd: weave@notty
Is the @notty indicative of no shell output going back up the pipe?
In the source it tests if the files exist.
if ( !$wp_filesystem->exists($from . '/wordpress/wp-settings.php') || !$wp_filesystem->exists($from . '/wordpress/wp-admin/admin.php') ||
!$wp_filesystem->exists($from . '/wordpress/wp-includes/functions.php') ) {
$wp_filesystem->delete($from, true);
return new WP_Error('insane_distro', __('The update could not be unpacked') );
}
The exists function runs that "ls -lad" command which I assume tries to check the output of the command, and if there is no STDOUT output getting back to the script, then maybe it just thinks the files are not there, and fails?