No, an empty but non-null delegate will still be invoked as far as I'm aware.
Regarding your unsubscription: please provide some sample code. (I'll provide sample code showing the reverse in a minute.)
using System;
class Test
{
static void Main()
{
Action action = EmptyMethod;
Console.WriteLine(action.GetInvocationList().Length);
action += NonEmptyMethod;
action -= NonEmptyMethod;
Console.WriteLine(action.GetInvocationList().Length);
}
static void EmptyMethod() {}
static void NonEmptyMethod()
{
Console.WriteLine("Testing");
}
}
This just prints 1 twice - showing a single "empty" handler before and after the subscribe/unsubscribe cycle.
I'm sure that when you've posted a similar example which shows what you mean, we'll be able to explain your results easily.