Instead of loading the BehaviorSource with the Assembly system, you should instead load the ExternalBehavior. This is a ScriptableAsset that is made to be loaded in cases like this. You can then assign the ExternalBehavior on the BehaviorTree component and it will deserialize properly.
Hmm... I think my explanation was incorrect. Let me start over from the beginning.
To get straight to the point:
1. When I manually click to activate the ExternalBehaviorTree asset in the Project window and load the ExternalBehaviorTree, the internal field values of the BT load correctly.
2. When I load the ExternalBehaviorTree without manually clicking the ExternalBehaviorTree asset in the Project window, the internal field values of the BT do not load.
I load the ExternalBehaviorTree asset using the following method:
public async UniTask LoadAsync()
{
ExternalBehaviorTree asset = AssetDatabase.LoadAssetAtPath<ExternalBehaviorTree>(assetPath);
}
1. When I select the ExternalBehaviorTree asset by clicking it with the mouse in the Project window and then load it using the LoadAsync() method, the following occurs:

The internal field values of ExternalBehaviorTree loaded correctly.
2. After refreshing Unity or waiting a certain amount of time, loading the ExternalBehaviorTree asset using the LoadAsync() method without selecting it first results in:

The internal field values of ExternalBehaviorTree did not load.
Although the same method was used, the result differs depending on whether the asset was directly selected and activated.
What I want is to fully load the internal field values of the ExternalBehaviorTree asset at any time.