Yet another get_posts() in explicitly defined order problem

Instead, you should use WP_Query

Something like so:

$specific_order_pages_query_args = array(
    'post_type' => 'page',
    'post__in'  => $ids,
    'orderby'   => 'post__in'
);

$specific_order_pages_query = new WP_Query( $specific_order_pages_query_args );

WP_Query’s order value post__in is a special value to order by the supplied post__in ID’s

See more under Order in WP_Query http://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters