Curved surfaces looking odd and Blocky with Subdivision
let me start by saying this is two question but anyway.
First things first... vertex pole count matters!

subdividing a model with different pole counts will give you different loop flow.


so the deformations you see is mostly because of how algorithm predicts how to smooth your flow. so if you want smooth surface, apart from some shrink-wrap work arounds, you need to keep your flow as clean as possible.
And on the blocky subject, as long as your flow is smooth, your result of subdivid will be smooth too. like this example with perfect flow of circle subdivided

for fixing this I recommend loop tools addon that is inside blender and you just need to enable it. it has an option for smoothing your edge flow called relax.