From my understanding of packed primitives this makes sense. You are packing your geo with more attributes. If your source object has 100 primitives and you assign a material you have assigned a string named shop_materialpath to each primitive/face. Memory usage will go up based upon the length of the path to the material. So nested materials paths will take more memory than say root based pathing (i.e. mat/my_mat).
What does not make sense is adding more materials should not increase memory usage as you experience. Continuing with my example, you only have 100 faces and if you assign multiple shop_materialpaths you still only have a 100 faces to populate a string attribute upon.
What seems like is happening is that when you add a new material somehow your geometry is getting duplicated as well. It is hard to tell without seeing an example scene. Are you branching and then merging things back together? Perhaps you have duplicate faces in the same exact location?
I can understand additional attributes adding extra data to packed prims being copied and referenced, they do, but adding a simple material should not take up this much extra memory? Doubling the geo on the object wouldn't even increase mem usage as much as adding a single string with a material path which makes no sense considering the additional data that goes with each additional primitive.
The geo is clean, I've experienced this across a few totally different scenes so far, it's a consistent behavior. It's just a single mesh loaded in with some materials applied.
In my bug submission I made it simple, one material added before and after the pack on some reasonably simple geo, the difference was huge. So regardless of whether this is just how it is I'd at least like to know what's going on.