I would opt for #2. There is a new version of MARC::Charset available which should ease the marc8 <-> utf8 charset translation. Shortly there will be a new MARC::File::XML that uses the latest MARC::Charset
You might be interested in taking a look at how Evergreen is storing MARC data. I know that they are using a modded version of MARC::File::XML in some capacity. Mike Rylander is on this list, so maybe he'll chime in--or otherwise you could drop into irc://irc.freenode.net/code4lib and ask him (he's usually there). As far as MARC::Record goes there is a version in sourceforge that is able to read/write iso2709 records with utf8 in them. Andy Lester has said he will send this to CPAN shortly, but that's the last I heard. //Ed