I am not absolutely sure, but in your example code for custom option pages the variable $page is used. For me this throws a php notice (array to string conversion) in /wp-includes/general-template.php on line 870. Using WP 4.1.1.
I think this is caused by naming the variable $page as this is a global variable. Changing it to something like $option_page will fix it.