LaTeX uses \l@<section> for formatting an entry in the table of contents. The second argument is the page number. Thus, it can be defined as macro and compared in the next call.
The following example also works with hyperref.
Also only those \l@... commands should be redefined, that actually appear in the table of contents. Otherwise a page number, which would appear on a section level, which is not put into the table of contents, would not be visible for the next entry on the same page, that is in the table of contents.
\documentclass[10pt,a4paper]{report}
\usepackage[utf8]{inputenc}
\usepackage{lipsum}
\makeatletter
\def\toc@page{}
% Chapters should have a page number.
% \l@chapter is redefined to remember the page number
\let\saved@l@chapter\l@chapter
\renewcommand*{\l@chapter}[2]{%
\def\toc@page{#2}%
\saved@l@chapter{#1}{#2}%
}
\let\saved@l@section\l@section
\renewcommand*{\l@section}[2]{%
\def\toc@new@page{#2}%
\ifx\toc@new@page\toc@page
\expandafter\@firstoftwo
\else
\def\toc@page{#2}%
\expandafter\@secondoftwo
\fi
{%
\saved@l@section{#1}{}%
}{%
\saved@l@section{#1}{#2}%
}%
}
\let\saved@l@subsection\l@subsection
\renewcommand*{\l@subsection}[2]{%
\def\toc@new@page{#2}%
\ifx\toc@new@page\toc@page
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{%
\saved@l@subsection{#1}{}%
}{%
\saved@l@subsection{#1}{#2}%
}%
}
\makeatother
\begin{document}
\tableofcontents
\chapter{Chapter 1}
\lipsum[1]
\section{Section 1}
\lipsum[2]
\section{Section 2}
\lipsum[3-5]
\section{Section 3}
\subsection{Subsection A}
\lipsum[6]
\section{Section 4}
\lipsum[7]
\end{document}

With gray page numbers
Making the page numbers gray instead, only requires a small modification:
\documentclass[10pt,a4paper]{report}
\usepackage[utf8]{inputenc}
\usepackage{lipsum}
\usepackage{color}
\definecolor{tocpagegray}{gray}{.5}
\makeatletter
\def\toc@page{}
% Chapters should have a page number.
% \l@chapter is redefined to remember the page number
\let\saved@l@chapter\l@chapter
\renewcommand*{\l@chapter}[2]{%
\def\toc@page{#2}%
\saved@l@chapter{#1}{#2}%
}
\let\saved@l@section\l@section
\renewcommand*{\l@section}[2]{%
\def\toc@new@page{#2}%
\ifx\toc@new@page\toc@page
\expandafter\@firstoftwo
\else
\def\toc@page{#2}%
\expandafter\@secondoftwo
\fi
{%
\saved@l@section{#1}{\textcolor{tocpagegray}{#2}}%
}{%
\saved@l@section{#1}{#2}%
}%
}
\let\saved@l@subsection\l@subsection
\renewcommand*{\l@subsection}[2]{%
\def\toc@new@page{#2}%
\ifx\toc@new@page\toc@page
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{%
\saved@l@subsection{#1}{\textcolor{tocpagegray}{#2}}%
}{%
\saved@l@subsection{#1}{#2}%
}%
}
\makeatother
\begin{document}
\tableofcontents
\chapter{Chapter 1}
\lipsum[1]
\section{Section 1}
\lipsum[2]
\section{Section 2}
\lipsum[3-5]
\section{Section 3}
\subsection{Subsection A}
\lipsum[6]
\section{Section 4}
\lipsum[7]
\end{document}

With gray page numbers and gray dots
\documentclass[10pt,a4paper]{report}
\usepackage[utf8]{inputenc}
\usepackage{lipsum}
\usepackage{color}
\definecolor{tocpagegray}{gray}{.5}
\makeatletter
\def\toc@page{}
% Chapters should have a page number.
% \l@chapter is redefined to remember the page number
\let\saved@l@chapter\l@chapter
\renewcommand*{\l@chapter}[2]{%
\def\toc@page{#2}%
\saved@l@chapter{#1}{#2}%
}
\let\saved@l@section\l@section
\renewcommand*{\l@section}[2]{%
\def\toc@new@page{#2}%
\ifx\toc@new@page\toc@page
\expandafter\@firstoftwo
\else
\def\toc@page{#2}%
\expandafter\@secondoftwo
\fi
{%
\begingroup
\let\leaders\toc@leaders@gray
\saved@l@section{#1}{\textcolor{tocpagegray}{#2}}%
\endgroup
}{%
\saved@l@section{#1}{#2}%
}%
}
\let\saved@l@subsection\l@subsection
\renewcommand*{\l@subsection}[2]{%
\def\toc@new@page{#2}%
\ifx\toc@new@page\toc@page
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{%
\begingroup
\let\leaders\toc@leaders@gray
\saved@l@subsection{#1}{\textcolor{tocpagegray}{#2}}%
\endgroup
}{%
\saved@l@subsection{#1}{#2}%
}%
}
\let\org@leaders\leaders
\newcommand*{\toc@leaders@gray}[2]{%
\org@leaders\hbox{\textcolor{tocpagegray}{#2}}%
}
\makeatother
\begin{document}
\tableofcontents
\chapter{Chapter 1}
\lipsum[1]
\section{Section 1}
\lipsum[2]
\section{Section 2}
\lipsum[3-5]
\section{Section 3}
\subsection{Subsection A}
\lipsum[6]
\section{Section 4}
\lipsum[7]
\end{document}

With removal of unnecessary dots
If the page number is omitted, then the dots leading to the non-existent page number are no longer necessary. The following example removes them. Package hyperref is loaded this time.
\documentclass[10pt,a4paper]{report}
\usepackage[utf8]{inputenc}
\usepackage{lipsum}
\usepackage{etoolbox}
\usepackage[colorlinks]{hyperref}
\makeatletter
\def\toc@page{}
% Chapters should have a page number.
% \l@chapter is redefined to remember the page number
\let\saved@l@chapter\l@chapter
\renewcommand*{\l@chapter}[2]{%
\def\toc@page{#2}%
\saved@l@chapter{#1}{#2}%
}
\let\saved@l@section\l@section
\renewcommand*{\l@section}[2]{%
\def\toc@new@page{#2}%
\ifx\toc@new@page\toc@page
\expandafter\@firstoftwo
\else
\def\toc@page{#2}%
\expandafter\@secondoftwo
\fi
{%
\begingroup
\let\leaders\@gobbletwo
\saved@l@section{#1}{}%
\endgroup
}{%
\saved@l@section{#1}{#2}%
}%
}
\let\saved@l@subsection\l@subsection
\renewcommand*{\l@subsection}[2]{%
\def\toc@new@page{#2}%
\ifx\toc@new@page\toc@page
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{%
\begingroup
\let\leaders\@gobbletwo
\saved@l@subsection{#1}{}%
\endgroup
}{%
\saved@l@subsection{#1}{#2}%
}%
}
\makeatother
\begin{document}
\tableofcontents
\chapter{Chapter 1}
\lipsum[1]
\section{Section 1}
\lipsum[2]
\section{Section 2}
\lipsum[3-5]
\section{Section 3}
\subsection{Subsection A}
\lipsum[6]
\section{Section 4}
\lipsum[7]
\end{document}

With unnecessary dots and with page numbers at new pages
The following modification sets labels to detect the page, where the entry of the table of contents is located. Then it checks, if the page number has changed, which indicates a new page in the table of contents. Then the page number is set, even if the page number already appears on the previous page.
\documentclass[10pt,a4paper]{report}
\usepackage[utf8]{inputenc}
\usepackage{lipsum}
\usepackage{etoolbox}
\usepackage[colorlinks]{hyperref}
\usepackage{zref-abspage}
\makeatletter
\def\toc@page{}
\def\toc@abspage{}
\newcounter{toc@abspage}
\renewcommand*{\thetoc@abspage}{%
ta@\the\value{toc@abspage}%
}
\newcommand*{\toc@abspage@label}{%
\zref@labelbyprops{\thetoc@abspage}{abspage}%
}
\newcommand*{\toc@abspage@check}{%
\stepcounter{toc@abspage}%
\edef\toc@abs@page{\zref@extractdefault{\thetoc@abspage}{abspage}{}}%
\zref@refused{\thetoc@abspage}%
\ifx\toc@abs@page\toc@abspage
\else
\def\toc@page{}%
\let\toc@abspage\toc@abs@page
\fi
}
% Chapters should have a page number.
% \l@chapter is redefined to remember the page number
\let\saved@l@chapter\l@chapter
\renewcommand*{\l@chapter}[2]{%
\toc@abspage@check
\def\toc@page{#2}%
\saved@l@chapter{#1}{#2\toc@abspage@label}%
}
\let\saved@l@section\l@section
\renewcommand*{\l@section}[2]{%
\toc@abspage@check
\def\toc@new@page{#2}%
\ifx\toc@new@page\toc@page
\expandafter\@firstoftwo
\else
\def\toc@page{#2}%
\expandafter\@secondoftwo
\fi
{%
\begingroup
\let\leaders\@gobbletwo
\saved@l@section{#1}{\toc@abspage@label}%
\endgroup
}{%
\saved@l@section{#1}{#2\toc@abspage@label}%
}%
}
\let\saved@l@subsection\l@subsection
\renewcommand*{\l@subsection}[2]{%
\toc@abspage@check
\def\toc@new@page{#2}%
\ifx\toc@new@page\toc@page
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{%
\begingroup
\let\leaders\@gobbletwo
\saved@l@subsection{#1}{\toc@abspage@label}%
\endgroup
}{%
\saved@l@subsection{#1}{#2\toc@abspage@label}%
}%
}
\makeatother
\begin{document}
\tableofcontents
\chapter{Chapter 1}
\lipsum[1]
\section{Section 1}
\lipsum[2]
\addtocontents{toc}{\protect\newpage}
\section{Section 2}
\lipsum[3-5]
\section{Section 3}
\subsection{Subsection A}
\lipsum[6]
\section{Section 4}
\lipsum[7]
\end{document}