I've tried running the code you supplied and it seems to work fine.
Let me see if I understand the flow:
1. Create fake instance of Class2
2. Use Swap to replace the fake with a future object
3. Create a real Class1
4. Set a Property on Class1
5. call Class1.LinkedClass
6 .Inside LinkedClass - check if _cachedClass2 is null - It is!
7. Create a new Class2 (this is where swap kicks in) and call Class2.Load
It worked the same with or without a breakpoint. The assert will always fail because class2 is faked and the parameter passed to its c'tor has no effect on it.
You can use the following code to make sure that the code inside the if statement is always called:
Class2 faked = Isolate.Fake.Instance<Class2>(Members.ReturnRecursiveFakes);
Class1 target = new Class1();
target.Class2Id = 2L;
Class2 result = target.LinkedClass2;
Isolate.Verify.WasCalledWithAnyArguments(() => faked.Load());