This was the anemic domain model:
public partial class Person
{
    public virtual int PersonId { get; internal protected set; }
    public virtual string Title { get; internal protected set; } 
    public virtual string FirstName { get; internal protected set; } 
    public virtual string MiddleName { get; internal protected set; } 
    public virtual string LastName { get; internal protected set; } 
}
And this is its behavior:
public static class Services
{
    public static void UpdatePerson(Person p, string firstName, string lastName)
    {
        // validate  firstname and lastname
        // if there's a curse word, throw an exception
        // if valid, continue
        p.FirstName = firstName;
        p.LastName = lastName;
        p.ModifiedDate = DateTime.Now;
    }
}
And it's pretty much testable:
[TestMethod]
public void Is_Person_ModifiedDate_If_Updated()
{
    // Arrange
    var p = new Mock<Person>();
    // Act 
    Services.UpdatePerson(p.Object, "John", "Lennon");
    // Assert            
    p.VerifySet(x => x.ModifiedDate = It.IsAny<DateTime>());
}
However, I wanted to practice Rich Domain Model, where data and behavior is more logically-cohesive. So the code above is now converted to:
public partial class Person
{
    public virtual int PersonId { get; internal protected set; }
    public virtual string Title { get; internal protected set; }
    public virtual string FirstName { get; internal protected set; } 
    public virtual string MiddleName { get; internal protected set; }
    public virtual string LastName { get; internal protected set; } 
    public virtual void UpdatePerson(string firstName, string lastName)
    {
        // validate  firstname and lastname
        // if there's a curse word, throw an exception
        // if valid, continue
        this.FirstName = firstName;
        this.LastName = lastName;
        this.ModifiedDate = DateTime.Now;
    }           
}
However I encounter testing problem:
[TestMethod]
public void Is_Person_ModifiedDate_If_Updated()
{
    // Arrange
    var p = new Mock<Person>();
    // Act 
    p.Object.UpdatePerson("John", "Lennon");
    // Assert            
    p.VerifySet(x => x.ModifiedDate = It.IsAny<DateTime>());
}
Unit test error:
Result Message: 
Test method Is_Person_ModifiedDate_If_Updated threw exception: 
Moq.MockException: 
Expected invocation on the mock at least once, but was never performed: x => x.ModifiedDate = It.IsAny<DateTime>()
No setups configured.
Performed invocations:
Person.UpdatePerson("John", "Lennon")
Result StackTrace:  
at Moq.Mock.ThrowVerifyException(MethodCall expected, IEnumerable`1 setups, IEnumerable`1 actualCalls, Expression expression, Times times, Int32 callCount)
   at Moq.Mock.VerifyCalls(Interceptor targetInterceptor, MethodCall expected, Expression expression, Times times)
   at Moq.Mock.VerifySet[T](Mock`1 mock, Action`1 setterExpression, Times times, String failMessage)
   at Moq.Mock`1.VerifySet(Action`1 setterExpression)
   at Is_Person_ModifiedDate_If_Updated()
Seeing that directly invoking a method from the mocked's Object, the mocked object then can't detect if any of its property or method was called. Having noticed that, what's the proper way to unit test a Rich Domain Model?
 
     
     
    