Done with MetaPost here, also through clipping and restoring the intersection part. To be run with LuaLaTeX.
I used the shading facilities provided by the Metafun format of MetaPost. I chose a linear shading, since it seems more appropriate for rectangles.
\documentclass{standalone}
\usepackage{luamplib}
\mplibsetformat{metafun}
\begin{document}
\begin{mplibcode}
input mpcolornames;
vardef myshade(expr debut, fin, mycolor) =
define_linear_shade(debut, fin, .1[white, mycolor], mycolor)
enddef;
def fillit_withshade(expr pat, mycolor) =
fill pat withshade myshade(ulcorner pat, lrcorner pat, mycolor);
enddef;
beginfig(1);
numeric a, b; a = 2.75cm; b = 3cm;
picture intersect; intersect = nullpicture;
path rect[], fullrect, bb_intersect; fullrect = fullsquare xyscaled (a, b);
rect1 = fullrect xshifted .75a; rect2 = fullrect yshifted .75b;
rect3 = fullrect xshifted -.75a; rect4 = fullrect yshifted -.75b;
bb_intersect = buildcycle(rect4, subpath (3, 5) of rect1)
leftenlarged .5bp bottomenlarged .5bp;
% extends the intersection to its lower-left boundary (.5bp is the default pen width)
fillit_withshade(rect4, Purple);
clip currentpicture to bb_intersect; addto intersect also currentpicture;
fillit_withshade(rect4, Purple); fillit_withshade(rect3, red);
fillit_withshade(rect2, yellow); fillit_withshade(rect1, blue);
draw intersect;
endfig;
\end{mplibcode}
\end{document}
