According to this post by Charles Kelley, the first MC_CELL_TICK generated by the cell stays open all the time and is just updated by a rule as each new MC_CELL_TICK arrives. The rule then drops the new MC_CELL_TICK event, which prevents it from being processed further.
Your rule uses the execute rule phase. The execute phase is triggered when an event slot changes. Your when clause uses the status slot of the MC_CELL_TICK event, which will never change. If the slot doesn't change, your rule won't execute. According to Charles, the rule that updates MC_CELL_TICK increments the repeat_count slot. Your when clause should use that slot since it will be updated by every new cell tick.
Thanks for the insight.
Have amended the logic with the new rule phase.
new Eye_Event: MC_CELL_TICK($I)
where [$I.status == 'OPEN']
EYE_EVENT ($EV) where [ $EV.custom_timer_flag == 'undefined' AND $EV.status == 'OPEN' AND $EV.mc_parameter contains 'Port Status Problem' AND ($EV.date_reception >= time_stamp() - 20) ]
$EV.custom_timer_flag = 'OFF';
ntadd( $EV, 'Celltickinterval has been executed');