In order to scale up, without it looking bad, you are going to need to create a 500x500 image using the actions the user used to make the image at 300x300. So even though you are only using 300x300 worth of screen space, you want to translate that to a 500x500 size image.
I am assuming that you are using 300x300 for the size, not because of limitations of the mobile devices (they can handle 500x500 images in most cases.)
With this in mind, I would say you should have an off screen canvas (just in memory, does not actually show on the bowser) that you create at 500x500. Then every action that occurs on the 300x300 should also be applied to the 500x500 canvas. When the user clicks save, send the 500px image to the server.