OK, I've figured this out but I may have discovered a small bug in TypeMock. Here's my final test:
Mock<SPWeb> mockWeb = MockSPWebInstance();
Mock<SPPropertyBag> mockBag = MockManager.MockObject<SPPropertyBag>(Constructor.StaticNotMocked);
mockBag.ExpectCall("Update", 4);
mockBag.CallBase.ExpectGetAlways("Keys", new[] { "key1", "key2", "key3", "key4" });
mockBag.CallBase.ExpectGetAlways("Values", new[] { "val1", "val2", "val3", "val4"});
mockBag.CallBase.ExpectGetAlways("Count", 4);
mockBag.CallBase.ExpectGetAlways("Item", "True");
mockBag.CallBase.ExpectAndReturn("ContainsKey", true, 4);
mockBag.ExpectSetIndexAlways();
mockWeb.ExpectGetAlways("Properties", mockBag.Object);
MySettings settings = new MySettings(mockWeb.Object as SPWeb);
settings.Username = "Frank";
settings.Update();
The ISSUE and possible bug was the fact that without this:
mockBag.ExpectCall("Update", 4);
which _was_
mockBag.ExpectCall("Update");
I received a NullReferenceException instead of the expected: "Expected 1: Actual 4" on the SPPropertyBag.Update() method.
I hope that help you. If you're getting a nullreferenceexception on a void method signature then you may be calling it too often! :)
I hope that helps someone in the future. Thanks!