The web server in pfSense is lighttpd in pfSense 1.2 it is configured by default for 1 maybe 2 connections only. This is okay for just standard firewall config on a limited resource box. This is bad for captive portal especially if you have more than one person connecting to captive portal at the same time.
pfSense 1.3 addresses this issue when captive portal is enabled the lighttpd is given more resources so it can handle more connections.
If you want to manually add these changes now to your pfSense firewall take a look at the following links.
This prepares the pfSense built in web server for more concurrent traffic.
http://forum.pfsense.org/index.php/topic,8861.msg50280.html#msg50280
This helps optimize PHP so it doesn't hold web server resources for a long period of time.
http://forum.pfsense.org/index.php/topic,8878.0.html
A workaround for now that will automatically remove the lock file after it is older than 3 minutes.
http://forum.pfsense.org/index.php/topic,8152.msg57899.html#msg57899
After making these changes I have supported over 130 people behind captive portal with no further problems.