The Pythagoras Path class could fairly easily be used to create a PlayN Path, so that's not an unreasonable way to store "platform independent" paths in memory until you need to instantiate them into real PlayN paths.
That said, the only reason Path is created by Canvas is because each platform Path implementation needs OS-specific internal data structures, so it has to be created via *some* factory method, you can't just "new Path()" a PlayN path. But they could be created by Graphics instead of Canvas. I put Path creation in Canvas because most of the time you actually do have a Canvas and you want to create a Path and render it to that canvas, and you might not have a Graphics reference handy, so it's easier to get it from Canvas. But I should probably add it to Graphics as well, to underscore that there's no special relationship between a particular Canvas and a particular Path.
So that's a long winded way of saying, you could also just create a "dummy" Canvas and use that to create PlayN Path instances when unserializing your data and just keep those around directly.