Currently, the logic in shouldReconcile() compares current time to status.lastPlanAt value + interval duration here and here. But the problem is that status.lastPlanAt isn't always updated on reconcile, e.g. if there are no planned changes it won't be updated.
So, what happens is after initial resource creation and planning, the logic will work correctly until time specified in spec.interval passes. After that, if there are no changes in plan, it is guaranteed to trigger reconcile because status.lastPlanAt + interval will always be lower than current time, regardless of when last reconcile happened.
Terraform resource also has status.lastHandledReconcileAt, which seems to be a better fit for comparison, as it will always be updated on a reconcile.