At startup, we ask for headers leading up to the tip from every new peer we connect to or accept a connection from if we believe we're synced. This immediately bootstraps the parallel block fetches that keeps us in sync.
However, when we reindex, we usually have all connection slots already filled by the time the reindex finishes, and we don't go back to ask for headers from existing connections. This usually leads to a wait until the next block is inved.
This problem is likely worsed by #7917, as it may now also trigger in cases where the chainstate is behind the blockindex.