Update UI lists modules/themes that are already updated
This was caused by the Update Status Advanced Settings (update_advanced) module.

I didn't know this module was installed or what it was, so here's how I traced it back:

modules/update/update.compare.inc is where the core update module checks versions of each module and theme, beginning with update_calculate_project_data() - this creates a $project array that contains current/recommended versions, plus a numeric 'status' key.

'status' is a constant, set in modules/update/update.module, with values including:

define('UPDATE_CURRENT', 5); // project is up to date
define('UPDATE_NOT_CHECKED', -1); // Project's status cannot be checked.


I used Xdebug on update_calculate_project_data(), specifically tracking the modules that were stuck on the update screen.

They all had a status of UPDATE_CURRENT initially (as expected/desired), but that changed to UPDATE_NOT_CHECKED after the call to the hook in line 363:

drupal_alter('update_status', $projects);


Searching the code base, found this hook is implemented in sites/all/modules/update_advanced/update_advanced.module:50 by update_advanced_update_status_alter()

If you've got this module, the settings page is /admin/reports/updates/settings; you can instruct it to not warn you about specific modules. 

The side effect is that by changing the status to anything other than UPDATE_CURRENT, a module/theme will always be listed in the Update UI (modules/update/update.manager.inc:94), including if the module is "current" really.