I am currently working on this issue but still trying to find a good solution that would work for all.
Let’s consider the following font asset setup:
- Primary static font asset that contains the letter “A”
– Static bold version font asset assigned as bold font weight that also contains the letter “A”
** Dynamic font asset using same font assigned as local fallback
*** Dynamic bold version of same font assigned as bold font weight
If we were to type “AB” in the Text Input using the above setup we would get the following output where the A is coming from the primary and B from the dynamic fallback.
If we were to select the Font Style Bold, we would get the following where the A is coming from the static bold font asset assigned as bold font weight on the primary but the B would be fake bold although our dynamic fallback has a dynamic font asset assign for bold font weight.
At some point, the above behavior was reported where the expectation was that we would end up using the true bold font weight and not synthesized bold.
Note: Light yellow indicates the character is coming from the primary. Darker yellow indicates it is coming from the local dynamic fallback. Light blue is font asset assigned to primary as bold font weight and darker blue, the font asset assigned to the dynamic fallback’s bold font weight.
Now, in the new version of TMP using the same setup and text, we get the following where we can see that we end up using the correct bold even if the character comes from the local dynamic fallback.
In this same version, we would get the same expected results even if the primary was a static empty font asset that contains a combination of local static and dynamic fallbacks with various font weights assigned as seen below.
In the above, the color coding remains the same but purple is using a true italic font asset and green a true italic bold font asset.
Up until this point, we should be getting the expected results for all.
Here is where this breaks with respect to this newly reported issue…
In this search for the correct font style and weight, we look at the primary → its potential assigned font style and weights → local fallbacks and their potential assign font styles and weights but eventually get to the global fallbacks and default font asset where in this case we end up using the font assets assigned to the default font asset. We would get the same result if that font asset along with potential fallbacks and font styles and weights were assigned to the global fallbacks.
So the question here is when do we give up and decide to fake bold and italic?
We could limit the search to just the primary and local fallbacks which would produce the same results as described above but because this would ignore the global and default, we would end up faking the font style based on the setup provided in this report. In theory this would resolve the issue but …
What if a user is using a combination of static, dynamic and assigned font weights and styles in the Global fallbacks?
Over the years, I have seen projects using both local and global fallbacks to handle localization. Using local fallbacks works well for most cases with the exception of when you are using multiple fonts for Latin text but a common one for localization where you dynamically re-order those fallbacks based on locale. Yeah… complex setup but I run into that a lot.
In the above scenario, using the global fallbacks makes it easier as only one list of fallbacks need to be re-ordered as opposed to now having to re-order that for each primary. Still doable but getting more complex.
Limiting the search to exclude local sprite asset, Global fallbacks and default font assets like I said before would resolve this issue while providing most of the newly added flexibility in setup but ideally, I would love to find a way to do it all.
The purpose of my post is to lay this out to get thoughts and ideas as two or more brains are better than just one 
Thoughts?
P.S. The above would resolve the initial report from @tessellation (which should have been resolved previously) but all subsequent iterations / reports.