Use "ready for pickup" status as a check condition?

You may be able to make a recurring workflow for this using a Scheduled time trigger, followed by a Get order data action with a query that filters to unfulfilled pickup orders older than three weeks, followed by a condition that checks the fulfillments.displayStatus is equal to ‘READY_FOR_PICKUP’. I suspect that condition didn’t work in your second example because the “Fulfillment event created” trigger might fire before that fulfillments.displayStatus is populated.

I think that query on the “Get order data” may look something like this:

created_at:<='{{ scheduledAt | date_minus: "3 weeks" }}' AND fulfillment_status:unfulfilled AND delivery_method:pickup AND NOT status:cancelled