Did you integrate s2Member with PayPal? WP Admin > s2Member > PayPal Options
To test, enable logging and run a couple of test transactions to get some entries to help troubleshoot. WP Admin > s2Member > Logging
How often do they 'talk' to each other?
s2Member "talks" to PayPal when the user clicks the button, after that the communication is from PayPal to s2Member on the return, and the notifications.
had a user email to say they have paid, but no access to pages they should have
Try reproducing this behavior.
Was he logged in when the page with the button was loaded?
If he wasn't logged in, did he register and login after the payment?
Where did he register? wp-login.php or do you have another sign up form?
Did you use s2's shortcode for the PayPal button?
I look forward to your update.