GeoServer currently tries to use ST_Estimate_Extents to determine layer extents in PostGIS tables. ST_Estimate_Extents gets its information from the database's statistics table. However, those statistics are only generated when ANALYZE is called. If ANALYZE has not been run recently GeoServer will retrieve bounds that are out of date. Ideally GeoServer should run ANALYZE first, or it should be possible to disable the use estimated extents.