In Drupal 7, two methods are used to fetch update information. One uses a setting
update_max_fetch_time which is set to 5 seconds by default. On each cron run - whether from the server's cron or triggered by a visitor (poormanscron) - or page refresh of
admin/reports/updates, this value is used. Not every module's status can be fetched within those 5 seconds, which is what you're seeing.
If you use the 'Check manually' link from the 'Available updates' page (
admin/reports/updates/check), a batch operation is used instead, which should process all modules. There are however also reports that this doesn't always work correctly (
Failed to get available update data for [number] projects message, you would then see the status of some modules in a grey box). You may also have to clear Drupal's cache first for this to work correctly.
The best thing to do is probably to set up a cron job to run each hour (for example). This will progressively keep the status of all modules updated.
Another workaround would be to override the update_max_fetch_time value and set it to e.g. 30 seconds (you can set
$conf['update_max_fetch_time'] = 30; in settings.php, or with Drush do
drush vset update_max_fetch_time 30). But if a cron run is then triggered by poormanscron, this could lead to a long page loading time.
This is from issue 952394 (still open).