Why don't you retrieve the point type and compare it directly with 'timestamp'?
The SDK is not exactly taking the COMObject as a digital state... you are telling the SDK to do so ;) Essentially, your code is assuming that a COMObject is necessarily a PISDK.DigitalState under the hood - you need to make it more flexible and assume the COMObject can be a PITimeServer.PITime object too.
Something along the lines of:
PISDK.PIValue myValue = myServer.PIPoints["timestamptag"].Data.Snapshot;
if (myValue.Value is PISDK.DigitalState)
PISDK.DigitalState myDigState = (PISDK.DigitalState) myValue.Value;
textBox4.Text = myDigState.Name;
else if (myValue.Value is PITimeServer.PITime)
PITimeServer.PITime myTimestamp = (PITimeServer.PITime) myValue.Value;
textBox4.Text = myTimestamp.LocalDate.ToString();
textBox4.Text = myValue.Value.ToString();
Another use case you might want to account for is BLOB type tags, if used within your organization. Do not hesitate to start a new discussion thread on the topic, if you need further information...