We've seen this issue with a handful of our users, and I was finally able to replicate it today. After gathering logs from one of our users, we noticed that their device was low on disk space. So, I filled up one of my test devices with video, then launched our app, and voilà: it was unable to obtain product IDs, and attempting to restore purchases produced the SKErrorDomain error 0. The device's log was full of crash logs like this:
Aug 23 15:22:11 iPhone-5 itunesstored[823] <Error>: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFData objectForKey:]: unrecognized selector sent to instance 0x17b83200'
...
Aug 23 15:22:11 iPhone-5 com.apple.xpc.launchd[1] (com.apple.itunesstored[823]) <Notice>: Service exited due to signal: Abort trap: 6
Aug 23 15:22:11 iPhone-5 ReportCrash[817] <Error>: Not saving crash log because we have reached the limit for logs to store on disk. Sync or otherwise clear logs from /var/mobile/Library/Logs/CrashReporter to save new logs.
...
Aug 23 15:22:11 iPhone-5 ReportCrash[817] <Error>: Thread 1 name: Dispatch queue: com.apple.itunesstored.StoreKitClient.0x16eaa170
Aug 23 15:22:11 iPhone-5 ReportCrash[817] <Error>: Thread 1 Crashed
Now that it's in this state, I can't get the issue to go away: I freed up 3 GB of space, restarted the device, and even reinstalled the app, but to no avail. I plan to file a bug report, but will continue to look for a workaround.
For the others who are experiencing this issue: are you hosting downloadable IAP content with Apple?