Override dupligroup's object's material (Python)
Here is the basic code how to do it with Python:
http://www.pasteall.org/66951

import bpy

#1 Link like you do now. Dupligroup object is selected
#-----------------------------------------------
#2 take copies (.copy()) of our group objects
#-----------------------------------------------
o = bpy.context.object
objs = [i.copy() for i in o.dupli_group.objects]

#3 link them to the scene
#-----------------------------------------------
bpy.ops.object.select_all(action='DESELECT')
for i in objs:
    bpy.context.scene.objects.link(i)
    i.select = True

#4 make single users (mat+tex)
#-----------------------------------------------
bpy.ops.object.make_single_user(object=False, obdata=False, material=True, texture=True, animation=False)

#5 change matslot 0 material 
#-----------------------------------------------
for i in objs:
    i.material_slots[0].material = bpy.data.materials[0]    

#6 Use original group name
#-----------------------------------------------
groupname = o.dupli_group.name

for i in objs:
    bpy.data.groups[groupname].objects.link(i)

#7 set dupligroup for empty
#-----------------------------------------------
o.dupli_group = bpy.data.groups[groupname]

#Now you have exact mesh clones with different materials and they are still linked on mesh level and you control them with empty object like before.