A: 

As per wikipedia "An object referenced only by weak references is considered unreachable (or "weakly reachable") and so may be collected at any time. Weak references are used to avoid keeping memory referenced by unneeded objects"

I am not sure if your case is about weak references...

CodeToGlory
I'm well aware of the standard description of weak references. My case is about reexamining the standard description of weak references because I am currently confronted with evidence that suggests that the actual behavior is more sophisticated.
Kennet Belenky
+1  A: 

Try calling GC.WaitForPendingFinalizers() right after GC.Collect().

Another possible option: don't ever use a WeakReference for any purpose. In the wild, I've only ever seen them used as a mechanism for lowering an application's memory footprint (i.e. a form of caching). As the mighty MSDN says:

Avoid using weak references as an automatic solution to memory management problems. Instead, develop an effective caching policy for handling your application's objects.

MusiGenesis
I do have the WaitForPendingFinalizers in my code.I generally agree with you that 99% of the time if you're using WRs, you're doing it wrong. I think this is the 1% case. I have to keep a central list of objects which does not affect the object lifetime.
Kennet Belenky