Disable Material Duplication
You can run this script to replace all duplicated materials in your file. Just paste it into the Text editor and click the Run Script button. 

It searches all objects, and then compares the first part of the material name (the part before the .001 suffix) with any materials named the same, and if a match is found replaces the object material with the matched material.

The idea would be to do a Full Scene copy and then run this script to remove all material duplicates.

import bpy
mats = bpy.data.materials

for obj in bpy.data.objects:
    for slt in obj.material_slots:
        part = slt.name.rpartition('.')
        if part[2].isnumeric() and part[0] in mats:
            slt.material = mats.get(part[0])


Before running the script, make sure your materials are named properly. Any material that ends with .001, .002 or 003, will be replaced by its "original version".

Credit for script goes to user liero on  this BlenderArtist.org page

Ctrl + Shift + O finishes the job by reloading the file.