Try flushing out the transient data(options prefixed with
_site_transient_update_ - wp_options table), WP will recreate them for you anyway.
Not always a solution but tends to work for me when i have that problem.
You can do this by adding the following lines to your current theme's functions.php (in wp-content/themes/YOURTHEME/functions.php).
delete_option( '_site_transient_update_core' );
delete_option( '_site_transient_update_themes' );
delete_option( '_site_transient_update_plugins' );
NOTE: You probably only need the first one, but i usually flush them all if i'm flushing one(can't hurt to have a refresh).
Load any page up once, admin page, post page, whatever, then remove the code(it only needs to run for one page load).