I've narrowed this latency down to the Bundles() call that is made for every single reconcile.
I added logging to the catalogmetadata.Client.Bundles() call to report start time and end time, and the function consistently takes around 30s, and it pegs a CPU.
This seems like a bug we should treat with a fairly high priority.