You might be running up against WordPress’s global $blog_id
variable in test case #2.
Try this:
foreach($sites as $my_blog_id => $name) {
switch_to_blog($my_blog_id);
$sites[$my_blog_id] = get_bloginfo('name');
restore_current_blog();
}