You did already all the hard work. In order to go to full opacity, you only need to fill on the background layer, which comes with the backgrounds library.
\documentclass[tikz,border=1mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix, positioning,backgrounds}
\tikzset{
matstyle/.style={
matrix of nodes,
nodes={
draw
}
}
}
\begin{document}
\begin{tikzpicture}
\matrix (I) [matstyle]
{
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & 1 & 0 & 1 & 1 & 0 & 0\\
0 & 0 & 1 & 0 & 1 & 1 & 0 & 0\\
0 & 0 & 1 & 1 & 1 & 0 & 0 & 0\\
0 & 0 & 1 & 0 & 1 & 1 & 0 & 0\\
0 & 0 & 1 & 0 & 1 & 1 & 0 & 0\\
0 & 0 & 1 & 1 & 1 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
};
\begin{scope}[on background layer]
\draw [fill=red] (I-1-1.north west) rectangle (I-2-2.south east);
\draw [fill=green] (I-4-5.north west) rectangle (I-5-6.south east);
\end{scope}
\end{tikzpicture}
\end{document}

It becomes slightly more appealing IMHO if you only fill but do not draw.
\documentclass[tikz,border=1mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix, positioning,backgrounds}
\tikzset{
matstyle/.style={
matrix of nodes,
nodes={
draw
}
}
}
\begin{document}
\begin{tikzpicture}
\matrix (I) [matstyle]
{
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & 1 & 0 & 1 & 1 & 0 & 0\\
0 & 0 & 1 & 0 & 1 & 1 & 0 & 0\\
0 & 0 & 1 & 1 & 1 & 0 & 0 & 0\\
0 & 0 & 1 & 0 & 1 & 1 & 0 & 0\\
0 & 0 & 1 & 0 & 1 & 1 & 0 & 0\\
0 & 0 & 1 & 1 & 1 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
};
\begin{scope}[on background layer]
\fill[red] (I-1-1.north west) rectangle (I-2-2.south east);
\fill[green] (I-4-5.north west) rectangle (I-5-6.south east);
\end{scope}
\end{tikzpicture}
\end{document}

Here is an addendum in which all the lines have the same width (because there are negative values for column sep and row sep) and a style that slightly simplifies the filling. Now you "only" have to say \fill[red] (I-1-1) to[fill entries] (I-2-2); instead of \fill[red] (I-1-1.north west) rectangle (I-2-2.south east);. If you are willing to load the calc library, one could make this become "intelligent", i.e. find the appropriate anchors by itself.)
\documentclass[tikz,border=1mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix, positioning,backgrounds}
\tikzset{
matstyle/.style={
matrix of nodes,row sep=-\pgflinewidth,column sep=-\pgflinewidth,
nodes={
draw,
}
},fill entries/.style={to path=(\tikztostart.north west) rectangle
(\tikztotarget.south east)
}
}
\begin{document}
\begin{tikzpicture}
\matrix (I) [matstyle]
{
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & 1 & 0 & 1 & 1 & 0 & 0\\
0 & 0 & 1 & 0 & 1 & 1 & 0 & 0\\
0 & 0 & 1 & 1 & 1 & 0 & 0 & 0\\
0 & 0 & 1 & 0 & 1 & 1 & 0 & 0\\
0 & 0 & 1 & 0 & 1 & 1 & 0 & 0\\
0 & 0 & 1 & 1 & 1 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
};
\begin{scope}[on background layer]
\fill[red] (I-1-1) to[fill entries] (I-2-2);
\fill[green] (I-4-5) to[fill entries] (I-5-6);
\end{scope}
\end{tikzpicture}
\end{document}

The same output can be achieved using the fit library, which is perhaps the most elegant option.
\documentclass[tikz,border=1mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix, positioning,backgrounds,fit}
\tikzset{
matstyle/.style={
matrix of nodes,row sep=-\pgflinewidth,column sep=-\pgflinewidth,
nodes={
draw,
}
}
}
\begin{document}
\begin{tikzpicture}
\matrix (I) [matstyle]
{
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & 1 & 0 & 1 & 1 & 0 & 0\\
0 & 0 & 1 & 0 & 1 & 1 & 0 & 0\\
0 & 0 & 1 & 1 & 1 & 0 & 0 & 0\\
0 & 0 & 1 & 0 & 1 & 1 & 0 & 0\\
0 & 0 & 1 & 0 & 1 & 1 & 0 & 0\\
0 & 0 & 1 & 1 & 1 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
};
\begin{scope}[on background layer]
\node[fill=red,fit=(I-1-1) (I-2-2),inner sep=0pt]{};
\node[fill=green,fit=(I-4-5) (I-5-6),inner sep=0pt]{};
\end{scope}
\end{tikzpicture}
\end{document}
\filland\draw? – Gilfoyle Jan 03 '19 at 19:37\drawalso draws the contour. If you look very carefully at the upper screen shot, you see that the boundaries of the red fill slightly overshoot, i.e. the matrix becomes wider and higher around this area. If this is what you want, use\draw, if not, use\fill, which does not draw the contour. – Jan 03 '19 at 19:39