I've been working on a project with similar goals and ran into the same thing. The core of the issue is that there are two catalogs, the resource catalog and the RAL catalog. The resource catalog is what the Puppet compiler emits and contains Puppet::Resource instances; this is what's actually sent to the agent and what you'll see if you run `puppet master --compile`. The RAL catalog is generated when the catalog is actually being applied (
https://github.com/puppetlabs/puppet/blob/master/lib/puppet/configurer.rb#L106), and converts Puppet::Resource instances to Puppet::Type instances. Puppet::Resource instances are meant to be serialized, but Puppet::Type instances aren't - I'm pretty sure that the error you're seeing is because Puppet is trying to serialize Puppet::Type instances that don't have the correct method defined.
That being said there's a couple of ways of converting things around to a more easily serializable format.
One option is to individually convert Puppet::Type instances to Puppet::Resource instances as you find them; I've been doing them with something like this:
Puppet::Type.type(:service).instances.map { |res| res.to_resource }
There are a couple of caveats in this - for instance things get a little bit screwy with some resource types such as files, but if you run into issues with too many parameters being generated/not enough parameters being generated, let me know.
If you make progress in this area let me know; since I'm doing some poking around in this area I would be interested in seeing what you find out as well.