`object.location` will never give the "correct" position for a object that has a constraint on it (or a parented object).  
That comes from the way [parenting][1] and constraints mess with the global coordinates (their effect gets calculated after the `object.location`).

To get the world position of the a child object (or an object governed by a constraint) you should use `object.matrix_world.translation`.  
[matrix_world][2] returns a matrix for the object's transformations in world space. The `.translation` part will convert the matrix to a location vector (just like `.location`).

---
The [blender wiki][3] has a good read for further explanation about the coordinates for parented objects (same principals for constraints).


  [1]: http://blender.stackexchange.com/a/26109/2217
  [2]: http://www.blender.org/api/blender_python_api_2_75_release/bpy.types.Object.html#bpy.types.Object.matrix_world
  [3]: http://wiki.blender.org/index.php/User:Pepribal/Ref/Appendices/ParentInverse