Okay, I think I've cracked the problem of 1) the list-all-posts plugin pointing to the blog root and not the permalink, and 2) the problem where posts to private blogs are not shown. I wanted to put this information in the public domain for anyone else (and for my own future benefit!)...
*1. Getting feeds to point to permalinks...*
Open up list-all-posts.php.
The function echoArrayPostList goes to the database and fetches back a number of fields from both the options table, the posts table, etc. You'll see (line 63) it fetches siteurl, which is self-explanatory - but it doesn't fetch guid, which is the technical way of saying "permalink". You need to add the following line after the siteurl fetch...
$tmp_guid = $wpdb->get_var("SELECT guid FROM " . "wp_" . $bid . "_posts" . " WHERE post_type = 'post' ORDER BY post_date_gmt DESC");
You now have the permalink to play with. To correct the output, find this line...
echo $title_begin_wrap . "" . $tmp_post_title . "" . $info . $title_end_wrap;
and swap it for this...
echo $title_begin_wrap . "" . $tmp_post_title . "" . $info . $title_end_wrap;
That uses the permalink rather than the siteurl.
*2. Listing private posts....*
Scroll down to the end of the plugin code. You'll see this line...
$blog_list = $wpdb->get_results( "SELECT blog_id, last_updated FROM " . $wpdb->blogs. " WHERE public = '1' . $order . " "
To output both public and private posts, modify as follows...
$blog_list = $wpdb->get_results( "SELECT blog_id, last_updated FROM " . $wpdb->blogs. " WHERE public = '1' OR public = '0' " . $order . " "
Now it's time to play with this thing...