A couple things:
1. There is a firewall rule which always exists, and which you do not see in the UI, that allows all packets that are part of an existing state.
2. User-created firewall rules operate only on connections entering an interface, never leaving.
So, when a client on OPT1 is able to use the internet, it is because you have created a firewall rule on OPT1 allowing packets to pass from the client to the internet. Rule 1 above takes care of the return packets.
If you want to use the firewall to block OPT1 clients access to the internet, then you must do it using block rules on OPT1. I expect you should be able to create a rule explicitly allowing clients on OPT1 to access the address of the CP server (i.e., pfsense) and place it at the top. Below that, create your rule to pass packets from OPT1 hosts to anywhere (or !LAN, as the case may be), and use the scheduler to activate and deactivate this rule according to your desired schedule.
Note that if you disable your pass rule at 15h00 on a schedule, any states existing at that time will continue to pass. You can use CP timeouts to kill these.