If I run
EXECUTE database.schema.procedure on SERVERB, the stored procedure (a non-trivial SELECT with no reference to dates or times) returns current data.
If I run
SELECT * FROM OPENQUERY(SERVERB, 'EXECUTE database.schema.procedure') on SERVERA, data from 2 years ago are returned (rows which no longer exist in the main table queried).
SERVERA is running SQL Server 2012. SERVERB was running SQL Server 2012 when the stored procedure was created and was upgraded in-place to SQL Server 2019 a few months ago.
Naturally, SERVERA has been rebooted several times since. The data are more recent than the creation date of the stored procedure and much older than the upgrade of SERVERB.
If I copy the SELECT statement from the stored procedure into the OPENROWSET() statement on SERVERA, the current data are returned.
Where (and why) is SERVERA caching the results from 2 years ago?