credo che chi ha progettato la libreria avesse la necessita di accedere al programma chiamante attraverso reflection, per farlo senza conoscere a priori il nome che l'utilizzatore da al proprio assembly usa il metodo GetEntryAssembly convinto del fatto che l'applicazioe wpf in questione sia l'exe entry point del processo. e' un trick poiche lo scopo non coincide con la sinopsi del metodo percui andava documentato...
Cosa è successo? è successo che l'entry point è un programma unmanaged percui non esiste reflection ed è per questo che il metodo ritorna null.
MA lo scopo era (spero e presumo) recuperare l'assembly del programma wpf, e tu ora sai come si chiama l'assembly del programma wpf anzi hai addirittura l'exe.
Per cio se solo avessi i sorgenti, potresti cambiare una semplice riga di codice e saresti apposto.
Ma non tutto è perduto. Possiamo fare il roundtrip della tua libreria scusami ma credevo che fino a qui ci fossimo capiti prima 
ti scrivo una miniguida al volo poi se hai problemi posti di volta in volta.
- copia il file della libreria in una cartella (pippo) dentro c: cosi è piu facile scrivere i percorsi.
- apri prompt dei comandi di visualstudio. si trova in Start-Programmi-visualstudio-visualstudioTools è tipo il prompt del dos ma con tutti i comandi di vs che andremo ad usare pronti all'uso.
- digita ildasm /out=c:\Pippo\nuova.il nome_file_della_libreria.dll
- si è generato un file nuova.il dentro pippo. Aprilo
- qui viene il bello dobbiamo cambiare ogni riga
codice:
IL_xxxx: call class [mscorlib]System.Reflection.Assembly [mscorlib]System.Reflection.Assembly::GetEntryAssembly()
con
codice:
IL_xxxx: ldstr "ConsoleApplication4.exe" //il percorso della wpf exe rispetto alla dll
IL_xxxx(+5): call class [mscorlib]System.Reflection.Assembly [mscorlib]System.Reflection.Assembly::LoadFrom(string)
qui c'è la difficoltà se non hai mai avuto a che fare con linguaggi tipo assembler. IL_XXXX sono codici di etichetta e il valore non è sequenziale ma cambia in base a quanto è "grande" l'istruzione precedente. L'istruzione di caricamento della stringa è "grande 5" mettendola prima della chiamata del metodo (che cambia in LoadFrom come hai visto) comporta il fatto che devi sfasare tutte le etichette successive di 5. A complicare le cose c'è il fatto che il sistema di numerazione è esadecimale. Ti conviene usare una calcolatrice con il sistema esadecimale per non sbagliarti. questo internamente al metodo perche per fortuna le etichette si azzerano ad ogni metodo.
- Fatto questo lavoro non devi far altro che riassemblare la dll sempre dalla console di vs con: ilasm c:\pippo\nuova.il /dll (cancella prima la precedente ma TIENI UNA COPIA!). Se non ci sono errori nelle modifiche precedenti avrai la dll modificata (nuova.dll) altrimenti riceverai un messaggio di ricostruzione fallita.
- cambia il nome e prova questa libreria
Per capire meglio il discorso delle etichette ti posto un esempio che ho fatto precedentemente per risponderti.
PRIMA
codice:
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 27 (0x1b)
.maxstack 2
.locals init (class [mscorlib]System.Reflection.Assembly V_0,
class [mscorlib]System.Reflection.Assembly V_1,
bool V_2)
IL_0000: nop
IL_0001: call class [mscorlib]System.Reflection.Assembly [mscorlib]System.Reflection.Assembly::GetEntryAssembly() //LA DEVO CAMBIARE!
IL_0006: stloc.0
IL_0007: ldstr "ConsoleApplication4.exe"
IL_000c: call class [mscorlib]System.Reflection.Assembly [mscorlib]System.Reflection.Assembly::LoadFrom(string)
IL_0011: stloc.1
IL_0012: ldloc.0
IL_0013: ldloc.1
IL_0014: call bool [mscorlib]System.Reflection.Assembly::op_Equality(class [mscorlib]System.Reflection.Assembly,
class [mscorlib]System.Reflection.Assembly)
IL_0019: stloc.2
IL_001a: ret
} // end of method Program::Main
DOPO
codice:
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 32 (0x20)
.maxstack 2
.locals init (class [mscorlib]System.Reflection.Assembly V_0,
class [mscorlib]System.Reflection.Assembly V_1,
bool V_2)
IL_0000: nop
IL_0001: ldstr "ConsoleApplication4.exe" //ho caricato la stringa l'istruzione mi fara sfasare tutte le etichette di 5 infatti...
IL_0006: call class [mscorlib]System.Reflection.Assembly [mscorlib]System.Reflection.Assembly::LoadFrom(string)
IL_000b: stloc.0
IL_000c: ldstr "ConsoleApplication4.exe"
IL_0011: call class [mscorlib]System.Reflection.Assembly [mscorlib]System.Reflection.Assembly::LoadFrom(string)
IL_0016: stloc.1
IL_0017: ldloc.0
IL_0018: ldloc.1
IL_0019: call bool [mscorlib]System.Reflection.Assembly::op_Equality(class [mscorlib]System.Reflection.Assembly,
class [mscorlib]System.Reflection.Assembly)
IL_001e: stloc.2
IL_001f: ret
} // end of method Program::Main