Αντί γι αυτό, κάνε τον απλούστατο έλεγχο: if (ctl.Tag != null). Η χρήση του ReferenceEquals είναι εντελώς περιττή και απλά δεν κάνει αυτό που νομίζεις. Αντί να ελέγχει αν το περιεχόμενο των string είναι ίδιο, ελέγχει αν είναι το ίδιο string instance. Στην περίπτωση σου ΕΤΥΧΕ να είναι ίδια, γιατί το .NET δημιουργεί μόνο ένα instance για κάθε string που δημιουργείται στον κώδικα. Αν π.χ. το tag έπαιρνε τιμή από κάποιο textbox, το ReferenceEquals θα αποτύγχανε.
Γενικά, νομίζω ότι πρέπει να δώσεις λίγη προσοχή στους τύπους και πως δουλεύει το casting, γιατί κόλπα όπως το GetType().Name, ή το ReferenceEquals είναι και περιττά και οδηγούν σε προβλήματα.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos