Here is the vector/rotation code:
	Code:
	import viz
viz.go()
euler1 = [0,0,30]
euler2 = [0,5,-30]
def ComputeAngleDifference(euler1, euler2):
	m = viz.Transform()
	
	#Extract forward/up/side vector from euler1
	m.setRot( vizmat.EulerToAxisAngle(euler1) )
	d = m.get()
	forward1 = d[8:11]
	up1 = vizmat.Vector(d[4:7])
	
	#Extract up vector from euler1 without roll
	m.setRot( vizmat.EulerToAxisAngle(euler1[0],euler1[1],0.0) )
	d = m.get()
	up1_no_roll = vizmat.Vector(d[4:7])
	
	#Compute rotation around forward vector of euler1
	roll1 = vizmat.AngleBetweenVector(up1,up1_no_roll)
	if (up1_no_roll.cross(up1) * forward1) < 0.0:
		roll1 *= -1.0
	
	#Extract forward/up/side vector from euler2
	m.setRot( vizmat.EulerToAxisAngle(euler2) )
	d = m.get()
	forward2 = d[8:11]
	up2 = vizmat.Vector(d[4:7])
	
	#Extract up vector from euler2 without roll
	m.setRot( vizmat.EulerToAxisAngle(euler2[0],euler2[1],0.0) )
	d = m.get()
	up2_no_roll = vizmat.Vector(d[4:7])
	
	#Compute rotation around forward vector of euler2
	roll2 = vizmat.AngleBetweenVector(up2,up2_no_roll)
	if (up2_no_roll.cross(up2) * forward2) < 0.0:
		roll2 *= -1.0
	#Compute angle difference between forward/up/side vectors
	forward_diff = vizmat.AngleBetweenVector(forward1,forward2)
	rotation_diff = abs(vizmat.AngleDiff(roll1,roll2))
	return forward_diff,rotation_diff
	
print ComputeAngleDifference(euler1,euler2)