Вам не нужно повторно объявлять контравариантность в параметре, но вам нужно указать параметры типа метода, если только он не является универсальным:
static int ippcServerRegisterProcedure<T1, T2>(int handle, string procedureName,
ippcFuncPtr<T1, T2> procedure)
Я бы также настоятельно рекомендовал вам следовать соглашениям об именах .NET и использовать стандартные делегаты, где это возможно ... так что в этом случае:
static int RegisterIpccServerProcedure<T1, T2>(int handle, string procedureName,
Func<T1, T2, int> procedure)