How to get the object created by bpy.ops.object.duplicate()?
bpy.ops.object.duplicate() finishes with the duplicated object as the currently selected object. Therefore, bpy.context.object is the reference to the new object.

Ex (assume object selected in 3d viewport):

import bpy
bpy.ops.object.duplicate()

dupli_obj = bpy.context.object
print(dupli_obj.name)             #check the console 


If you run this code, does it not give you what you expect?