Instead of using the CryptoFns.SimpleDESDecrypt and other logic from that learning unit, I would recommend using chained streams. You can find an example (for DevForce 2010 but still applicable to Classic) here - http://drc.ideablade.com/xwiki/bin/view/Documentation/code-sample-save-restore-chained-streams
The SimpleDESDecrypt method is working on the entire encrypted string at one time and not in chunks, and it also allocates a MemoryStream without providing an initial capacity, which might be causing the problem. I don't want to post the source code here, but I can provide the code for the SimpleDESEncrypt and SimpleDESDecrypt functions if you want to try tweaking them to see if the problem goes away. PM or email me if interested.
Regarding saving and restoring smaller EntitySets, we don't have any samples of this I'm afraid. The Developer's Guide has a general discussion on multiple EntitySets in the "Disconnected" chapter. The PM.SaveEntitySet method has several overloads which allow you to pass only the entities of interest. So for example, you could use PM.GetEntities to retrieve Customers, and then pass that EntityList or array into the SaveEntitySet method.