Out of the box, simple commerce (SC) works to a point. 500 error, hmm have you changed any source code? If not, your settings are wrong. Reread the documentation.
Having said that, i have just completed programming of a similar project with subscriptions. The subscription side of things for SC only handles a few ipn messages. In fact, ee docs suggest you handle subscriptions via paypal anyway ( not sc) Check the ipn txn_type that errored. Ensure SC has a method for it. If you want a better solution than SC, check out memberr. It has many good features. After purchasing memberr and playing with it for a month, we ditched it and rewrote and extended parts of SC to handle the ipn messages i needed - EOT, CANCEL, PURCHASE etc, added a few extra db tables for the subscriptions and created new control panel screens. I would have preferred to use an off the shelf product but for our needs like like memberr but found it had a bug in the code somewhere that wasnt setting the status of members entry correctly when the subscription expired.
Final thought, the purchase ipn is handled by SC for items but not subscriptions.