I use cron to kick users at just past midnight for our WiFi access (when the pub closes). I also have a time lock implemented which shows a "Our WiFi is off" message instead of the captive portal once users are kicked.
See this post here: http://forum.pfsense.org/index.php/topic,61730.msg333062.html#msg333062 I have posted the code I used to kick users at a set time.
In saying this, when I run my script to kick all users, it does kick all users perfectly, and when you look in the captiveportal.db file, it is completely empty, so obviously works. It does make me wonder if it would be simpler to just open the .db file and delete the contents, or even just delete the file (assuming pfsense will re-create it when required). Not tried this though, so don't take my work for it! The script linked to above works perfectly though!
you can remove all the echo outputs from the script, and also remove the portion that writes a log file (that was more for me to check it was running through cron).