I have a project which contains IP cores and the processes run as expected, however, when I close the project and open it again, it goes stale.
The process status is marked Out-of-Date with the explanation "IPs Modified."
In projects containing IPs, the "IP Modified" event was being fired incorrectly when a project was opened.
The "IP Modified" flag forces the Synthesis status and any subsequent runs are marked as out-of-date.
To work around this, use the "Force up-to-date" function:
set_property needs_refresh false [get_runs synth_1]
set_property needs_refresh false [get_runs impl_1]
This issue has been fixed in the Vivado 2012.3 release.