I think that the problem is in your HasMany mappings :
HasMany(x => x.EmployeeHomeAddresses).KeyColumn("Id");
HasMany(x => x.EmployeeBusinessAddresses).KeyColumn("Id");
I personally think this is a little misleading, but the KeyColumn function expects the name of the Foreign key column in the Employee table. So it becomes this :
HasMany(x => x.EmployeeHomeAddresses).KeyColumn("HomeAddressId");
HasMany(x => x.EmployeeBusinessAddresses).KeyColumn("BusinessAddressId");
Note that those HasMany relationships aren't actually needed for your mapping to work, so unless you really need to get a list of employees living at a specific address (which is weird), you could remove them completely and only keep your References mappings.
EDIT : Finally it seems that this error occurs because you need to override Equals and GetHashCode in your Address class. When Equals is not overridden, it only returns True if the two objects are exactly the same, and NHibernate modifies your entity when you call SaveOrUpdate to turn it into a proxy, which is the default behavior. See this question for more info.
public override bool Equals(object obj)
{
if(ReferenceEquals(obj, this))
return true;
var addr = obj as Address;
if(addr == null)
return false;
return addr.Country == this.Country && addr.State == this.State //and so on..
}