It looks like this is a limitation on the Shopify platform. I’m getting around the issue by having a flow add an order tag when the order is ready for pickup, then excluding the order tag:
created_at:<='{{ scheduledAt | date_minus: "5 days" }}' AND
created_at:>='{{ scheduledAt | date_minus: "90 days" }}'
fulfillment_status:unfulfilled AND NOT status:cancelled AND
tag_not:"Ready for Pickup"