Account account2 = account1 as Account; и Account account2 = (Account)account1; Есть различия?
Различия есть:
1. account1 as Account
В этом случаи происходит приведение типа с проверкой. Если account1 не является типом Account, результат этого выражения будет null
2. (Account) account1
В этом случаи, если account1 не является типом Account, будет брошено исключение InvalidCastException
В вашем случаи я рекомендовал бы такой вариант:Account account2 =  account1 as Account;
if (account2 == null)
{
    // account1 - это не Account
}
else
{
    // account1 - это Account
}
as означает, что ссылка может быть обнулена, если типы несовместимы.
У вас же вообще один тип! Надо писать account2 = account1 и все.
Если хотите скопировать значение вместо ссылки (что бы были два Андрея, на не Андрей и Вася), то надо реализовать интерфейс ICloneable. Ну или что-то похожее от себя:
account2=account1.Clone(), где 
public Account Clone(){
var a = new Account();
a.name=name;
return a;}