Restore Diff with overwrite?
Differential database backups contains pages that have changed since the last full backup.
From MSDN:

A differential backup is based on the most recent, previous full data backup. A differential backup captures only the data that has changed since that full backup. The full backup upon which a differential backup is based is known as the base of the differential. Full backups, except for copy-only backups, can serve as the base for a series of differential backups, including database backups, partial backups, and file backups. The base backup for a file differential backup can be contained within a full backup, a file backup, or a partial backup.

You cannot restore a differential backup over anything other than the freshly restored full backup used as a base for the differential.

At restore time, before you restore a differential backup, you must restore its base. Then, restore only the most recent differential backup to bring the database forward to the time when that differential backup was created. Typically, you would restore the most recent full backup followed by the most recent differential backup that is based on that full backup.

If you attempt to restore a differential backup, without first restoring the Full backup used as the base for the differential, you'll receive an error message, such as

Msg 3117, Level 16, State 1, Line 1
The log or differential backup cannot be restored because no files are ready to rollforward.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

Regarding your question:

What is the difference between restoring a diff and restoring a diff with overwrite?

Presumably you are talking about the WITH REPLACE clause on RESTORE DATABASE? RESTORE DATABASE xxx FROM DISK = 'C:\yyy.bak' WITH REPLACE, RECOVERY; will only touch modified pages when restoring a differential backup.
As a test, I performed the following:
USE master;
GO
IF EXISTS (SELECT 1 FROM sys.databases d WHERE d.name = 'DiffTest')
BEGIN
    DROP DATABASE DiffTest;
END
CREATE DATABASE DiffTest;
GO

BACKUP DATABASE DiffTest 
TO DISK = 'D:\SQLServer\Backups\DiffTest.bak'
WITH INIT;
GO

USE DiffTest;
GO
CREATE TABLE dbo.SomeDDL
(
    ID INT NOT NULL
);
INSERT INTO dbo.SomeDDL (ID)
VALUES (1);
GO

BACKUP DATABASE DiffTest
TO DISK = 'D:\SQLServer\Backups\DiffTest_DiffBackup.bak'
WITH INIT
    , DIFFERENTIAL;
GO


USE master;
GO
RESTORE DATABASE DiffTest
FROM DISK = 'D:\SQLServer\Backups\DiffTest.bak'
WITH REPLACE
    , RECOVERY;
GO
/*
    This select will fail because the dbo.SomeDDL table does not exist.

    Msg 208, Level 16, State 1, Line 5
    Invalid object name 'dbo.SomeDDL'.
*/
USE DiffTest;
SELECT *
FROM dbo.SomeDDL;
GO

USE master;
GO
RESTORE DATABASE DiffTest
FROM DISK = 'D:\SQLServer\Backups\DiffTest.bak'
WITH REPLACE
    , NORECOVERY;
GO
RESTORE DATABASE DiffTest
FROM DISK = 'D:\SQLServer\Backups\DiffTest_DiffBackup.bak'
WITH REPLACE,
    RECOVERY;
GO

/*
    This select runs because the dbo.SomeDDL table has been restored from the differential backup.
*/
USE DiffTest;
SELECT *
FROM SomeDDL;

The above code does the following:

Create a database
Take a backup of that database
Add a table and a row into that table
Take a differential backup of the database.
Restore the full backup.
See if the dbo.SomeDDL table exists (it doesn't, and an error is shown)
Restore the full backup.
Restore the differential backup.
See if the table and row exist - they do.

This proves restoring a differential backup will always replace the pages in the database with those contained in the backup file.