Are your custom classes marked as Serialisable? That's caught me out before, although I'm pretty certain it should throw an exception, guess it depends if you have any error handling hiding the error.
Other than that, make sure you have apply changes and sync changes round the right way, Sync changes is reading the values from the webpart property store and apply changes is saving them back.
Paul.
www.myfatblog.co.uktwitter.com/@cimares