Conditional tags mostly derive from and rely on main query.
is_page()
function calls$wp_query->is_page()
method- which checks
$wp_query->is_page
property (set during load) and some more stuff if you asked to check for specific page.
- which checks
So the likely reason for conditional tag not to produce expected return is issue with global $wp_query
, for example it getting erased and overwritten with query_posts()
call.