I suggest a calculation field that calculates an Email Date based on the value of DateEntered and the update option specified:
Let ( [ m = month ( DateEntered ) ;
d = Day ( DateEntered ) ;
y = Year ( DateEntered )
Case ( Updates = "Yearly" ; Date ( m ; d ; y + 1 ) ;
Updates = "Quarterly" ; Date ( m + 3 ; d ; y ) ;
Updates = "Monthly" ; Date ( m + 1 ; d ; y )
) // Case
) // Let
A script scheduled to run once a day can perform a find for all records with EmailDates with today's date and then send out your emails.
Not sure what "use" means with your "verify on every use" option, but that would probably be handled by a different script. Tripped each time the record is "used".