I have the same problem as well and here is how I got around what I think is a bug. (See thread.)
I have a WP Page called Blog and a corresponding template Blog.php with a template name of TmplBlog. Be sure that the template name is different from the name of the page or other weirdness (bugs?) will crop up with navigation links.
I created the following conditional functions in my functions.php file:
function get_page_id($page_title, $output = OBJECT) {
global $wpdb;
$page_title = $wpdb->escape($page_title);
$page = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_title = '$page_title' AND post_type='page'");
if ( $page )
return $page;
return NULL;
}
function is_blog() {
global $wp_query;
global $cached_page_id;
$blog_page_id = get_page_id('Blog');
if ( is_category() || is_day() || is_month() || is_year() || is_paged() || is_single() )
return true;
if ( isset($cached_page_id) && ($blog_page_id == $cached_page_id ))
return true;
if ( is_page('Blog') )
return true;
return false;
}
I then make sure that in any logic a call to is_blog() happens prior to any is_home calls. Note that the cached_page_id business is there since the page_id seems to be reset when I run custom queries on the page. So I cache it first thing on my TmplBlog tempalte.