Yo; found the problem. You have so many quotes in your calculation, they are actually messing it up, and I think the thing being returned is being converted into a string - hence the error, as you are adding it to a number field.What you need to do is get rid of the overall quotes. Using the method that @mdenil showed, where calcString = something is specified beforehand then printed, you were initially printing:calcString = "(!SUM_POP10!/!SUM_SUM_POP10!)*100" (itself a string)
but you actually just want:calcString = (!SUM_POP10!/!SUM_SUM_POP10!)*100 (it is still a string, just not wrapped in excessive quotes)
So, the code from my first post now becomes:popfield = arcpy.GetParameterAsText(2) #population field
popfield_new = '!'+popfield+'!'
arcpy.CalculateField_management(outputfc, percentfield, '('+popfield_new+'/SUM_'+popfield_new+')*100', "PYTHON")
I also just noticed that at one stage in your original post you are using gp, and another you are using arcpy. I don't really understand all the layers of arccrap, but it might be worth trying to get rid of anything referring to gp, and just using arcpy. So, arcpy.GetParameterAsText(), arcpy.AddMessage(), etc.Let me know how it goes...