(In C# 5.0) It's a pretty simple yes/no question which I can't seem to find an explicit answer for which probably means I'm looking in the wrong place or using the wrong terms in searching for the answer.
If I create a derived class object, then I cast it to a base class and the original reference goes out of scope, does the reference held in the base class casting preserve the entire derived class object? I.E. can I later recast it as the derived class with the original object always still intact?
It's a reference to the same object. The compile-time type of the expression which has a value of that reference is irrelevant. It's important to understand that there really is only one object - it's not like there's a base class object and then an associated derived class object.
That's why you can downcast as well:
string x = "hello";
object y = x;
string z = (string) y;
All three variables have the same value - they're all references to the same object. No information is lost. The reference itself is just "a way of getting to an object" - the variable determines which references are valid, and informs the compiler about which members can be accessed via that variable, but it doesn't change the value itself.
See more on this question at Stackoverflow