Although it is not stated in the Facebook PHP API documentation, you have to have apache configured for PHP sessions for the login process to work. That turned out to be the problem we encountered when we were getting the "CSRF state token does not match one provided".
Make sure if you are using a server pool that you have it set up to use memcache for session information, otherwise apache will write the session information locally and if the next request doesn't go to the same server you will get the "CSRF state token does not match one provided".
This was one of those things that worked like a charm in a development environment (with one server) but failed in production.
We also had to reconfigure our CDN settings to make sure we were passing through the PHP Session cookie.