Scale/Rescale using resize doesn't fit
One way to do this is to get used to scaling using the obj.matrix_world and obj.matrix_local. Where obj is a reference to your Object. That way you can reset to the original scale using the identity matrix. You can even chain various kinds of matrix manipulations (Rotate, Scale, Location).

I hope to have time to give examples. The documentation shows how to do things, but it assumes you know Matrices and Vectors well enough to understand the terms: 

docs: mathutils.Matrix



Ideasman points out that object.scale can be used. This is a convenient way if all you need is to rescale, it lets you scale directly using a vector (or tuple.. or list..as long as there's 3 elements).

obj = bpy.data.objects['Cube']
obj.scale = (0.5, 0.3, 1.2)

# will return all dimensions to their original value
obj.scale = (1, 1, 1)  


You mention in your Question about rotation. Another convenient way to rotate an Object can be found in the set of attributes starting with .rotation_*:  see Docs for a description of: 

obj.rotation_axis_angle
obj.rotation_euler
obj.rotation_mode
obj.rotation_quaternion

# ---- needed imports to use euler and math module
import math
from mathutils import Euler

obj.rotation_euler = Euler((0, 0, math.radians(45)), 'XYZ')