Environment.UserName вызывает GetUserName в advapi32.dll. Это означает, что если вы выдаете себя за другого пользователя, это свойство будет отражать это.
Thread.CurrentPrincipal имеет установщик и может быть изменен программно. (Между прочим, это не подражание).
WindowsIdentity - это ваша текущая windows личность, если таковая имеется. Это не обязательно будет отражать пользователя, подумайте ASP.NET с FormsAuthentication. Тогда WindowsIdentity будет NT-сервисом, а FormsIdentity будет зарегистрированным пользователем. Также есть PassportIdentity, и вы можете создавать свои собственные вещи, чтобы усложнять ситуацию.