<p dir="auto">Here's a snippet to reproduce the issue:</p>
<div class="highlight highlight-source-js notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="const x = new THREE.WebGLRenderTarget();
const y = new THREE.WebGLRenderTarget();

console.log( x.texture.image === y.texture.image ); // false

x.copy( y );

console.log( x.texture.image === y.texture.image ); // true"><pre class="notranslate"><span class="pl-k">const</span> <span class="pl-s1">x</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-c1">THREE</span><span class="pl-kos">.</span><span class="pl-c1">WebGLRenderTarget</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
<span class="pl-k">const</span> <span class="pl-s1">y</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-c1">THREE</span><span class="pl-kos">.</span><span class="pl-c1">WebGLRenderTarget</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>

<span class="pl-smi">console</span><span class="pl-kos">.</span><span class="pl-en">log</span><span class="pl-kos">(</span> <span class="pl-s1">x</span><span class="pl-kos">.</span><span class="pl-c1">texture</span><span class="pl-kos">.</span><span class="pl-c1">image</span> <span class="pl-c1">===</span> <span class="pl-s1">y</span><span class="pl-kos">.</span><span class="pl-c1">texture</span><span class="pl-kos">.</span><span class="pl-c1">image</span> <span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// false</span>

<span class="pl-s1">x</span><span class="pl-kos">.</span><span class="pl-en">copy</span><span class="pl-kos">(</span> <span class="pl-s1">y</span> <span class="pl-kos">)</span><span class="pl-kos">;</span>

<span class="pl-smi">console</span><span class="pl-kos">.</span><span class="pl-en">log</span><span class="pl-kos">(</span> <span class="pl-s1">x</span><span class="pl-kos">.</span><span class="pl-c1">texture</span><span class="pl-kos">.</span><span class="pl-c1">image</span> <span class="pl-c1">===</span> <span class="pl-s1">y</span><span class="pl-kos">.</span><span class="pl-c1">texture</span><span class="pl-kos">.</span><span class="pl-c1">image</span> <span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// true</span></pre></div>
<p dir="auto">What this means is that when <code class="notranslate">x.setSize</code> is called the object at <code class="notranslate">y.texture.image</code> is inadvertently modified but and is now out of sync with the true dimensions of render target <code class="notranslate">y</code>.</p>
<p dir="auto"><a href="https://github.com/mrdoob/three.js/blob/dev/src/textures/Texture.js#L94">This line</a> is the problem in <code class="notranslate">Texture.copy</code>:</p>
<div class="highlight highlight-source-js notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="this.image = source.image;"><pre class="notranslate"><span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-c1">image</span> <span class="pl-c1">=</span> <span class="pl-s1">source</span><span class="pl-kos">.</span><span class="pl-c1">image</span><span class="pl-kos">;</span></pre></div>
<p dir="auto">I assume this was originally intended to handle moving over an <code class="notranslate">&lt;img&gt;</code> tag without duplicating it -- <del>maybe it makes sense to duplicate the image tag? Or maybe it should clone the object in some cases:</del></p>
<div class="highlight highlight-source-js notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="this.image = source.image instanceof Image ? source.image : { ...source.image };"><pre class="notranslate"><span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-c1">image</span> <span class="pl-c1">=</span> <span class="pl-s1">source</span><span class="pl-kos">.</span><span class="pl-c1">image</span> <span class="pl-k">instanceof</span> <span class="pl-v">Image</span> ? <span class="pl-s1">source</span><span class="pl-kos">.</span><span class="pl-c1">image</span> : <span class="pl-kos">{</span> ...<span class="pl-s1">source</span><span class="pl-kos">.</span><span class="pl-c1">image</span> <span class="pl-kos">}</span><span class="pl-kos">;</span></pre></div>
<p dir="auto"><del>I imagine copy would behave a bit confusingly for <code class="notranslate">DataTexture</code>, as well.</del></p>
<p dir="auto"><em>Edit: I see now that retaining the image data reference is important for dealing with cloning textures before they've been fully loaded and is valuable for minimizing data duplication.</em></p>
<ul dir="auto">
<li>the face.material index is simply copied
<ul dir="auto">
<li><a href="https://github.com/mrdoob/three.js/blob/master/src/extras/GeometryUtils.js#L98">https://github.com/mrdoob/three.js/blob/master/src/extras/GeometryUtils.js#L98</a></li>
</ul>
</li>
</ul>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="faceCopy.materialIndex = face.materialIndex;"><pre class="notranslate"><code class="notranslate">faceCopy.materialIndex = face.materialIndex;
</code></pre></div>
<ul dir="auto">
<li>maybe materialInddex should be reindexed as it were before r53
<ul dir="auto">
<li><a href="https://github.com/mrdoob/three.js/blob/r52/src/extras/GeometryUtils.js#L98">https://github.com/mrdoob/three.js/blob/r52/src/extras/GeometryUtils.js#L98</a></li>
</ul>
</li>
</ul>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="            if ( face.materialIndex !== undefined ) {
                var material2 = geometry2.materials[ face.materialIndex ];
                var materialId2 = material2.id;
                var materialIndex = geo1MaterialsMap[ materialId2 ];
                if ( materialIndex === undefined ) {
                    materialIndex = geometry1.materials.length;
                    geo1MaterialsMap[ materialId2 ] = materialIndex;
                    geometry1.materials.push( material2 );
                }
                faceCopy.materialIndex = materialIndex;
            }"><pre class="notranslate"><code class="notranslate">            if ( face.materialIndex !== undefined ) {
                var material2 = geometry2.materials[ face.materialIndex ];
                var materialId2 = material2.id;
                var materialIndex = geo1MaterialsMap[ materialId2 ];
                if ( materialIndex === undefined ) {
                    materialIndex = geometry1.materials.length;
                    geo1MaterialsMap[ materialId2 ] = materialIndex;
                    geometry1.materials.push( material2 );
                }
                faceCopy.materialIndex = materialIndex;
            }
</code></pre></div>