I know this is an old thread, but I have to share with you guys. Maybe someone will benefit from my story.
If you think about it, Retention Policy is an if-statement.
So what I did was: set the retention policy to recur every day after the review date. However, inside the workflow, write an if-statement: If "today" is equal to the "expiry date".
If that is true, the workflow will continue running and do the actual workflow, send an email or whatever you want to do. If not, the workflow stops without doing anything else.
So, even though the workflow is recurring every day, it's actually running only on the expiry date. And even after that, it will keep on recurring every day and will send an email only when the if statement is true.
The steps:
I know its a simple idea, but it works. I thought about it hard and continuously for 3 days, even before sleeping!! and I'm so happy right now :)