The process of building custom solutions for SharePoint Server.
Based on my research, the crawler can crawl the Default zone of the web application. Server Name Mapping does not remap all managed properties based on the URL in the index. Two specific properties explicitly noted as not being remapped are SPSiteUrl and ParentUrl.
Because different result rendering paths (standard results vs. contextual scoping vs. different content types vs. different templates) pull display URLs from different managed properties, some results are built from properties that your mapping successfully altered, while others are built from properties that the mapping never touched. It is very likely that 20% of the results are rendering from a managed property that structurally cannot be remapped, no matter how many times you crawl.
This also predicts something worth testing: contextual searches scoped to "this site" or "this list" are known to fail or return zero results under a similar configuration. If this is currently happening, it shares the exact same root cause.
An index reset even combined with a full re-crawl or a full farm reset, simply reapplies the same partial mapping behavior to the fresh data. It does not change which properties get remapped.
First, try pointing your content sources to the Default zone URL instead of the Internal zone, and drop the reliance on Server Name Mapping altogether. Since you mentioned both zones have both ADFS and Windows Auth available, check whether the crawl account can directly use the Default zone's Windows Auth provider (instead of ADFS). Zones in SharePoint can be configured with multiple authentication providers simultaneously, so you should be able to achieve the crawler-friendly NTLM/Kerberos path, which you initially set up the Internal zone for without actually needing to crawl a non-Default zone.
These are the insights I found, updating you so you're aware!