Each project has its own data store called a “library” (probably not a name we will use when talking about this in our documentation etc.) that contains all of the entities that the project depends upon to draw itself, so that includes things like every notehead, every accidental, every clef, and so on. Each semantic entity refers to a “composite” (again, probably not a name you’ll see in the program itself), which is the thing that is actually drawn, and can consist of any combination of one or more glyphs from a font, a string of text in a particular font, and one or more graphics files.
So all of the note durations that you can write in Dorico have entities for their noteheads and their flags, each of which have their own composites defined.
If you switch from one SMuFL font to another (we’ve tested only with November and Bravura at the moment), then we assume that all of the necessary code points are mapped. It’s non-trivial to determine whether or not a given code point is mapped in a specific font, because the OS and/or the application framework you’re using tries its best to produce a character for you (e.g. by substituting another font, or by showing a special “empty” character), so in general we can’t know up-front whether or not e.g. the maxima notehead is going to be available in a given font. So you could end up with a substituted character if you subsequently try to type a maxima and the font doesn’t specify it.
For things where we are using optional glyphs as defined in SMuFL, e.g. for short flags, or for oversized noteheads (Dorico uses oversized noteheads by default), we do not assume that these will be present (and even if they are present, there’s of course no guarantee they will be at the same code point as they are in Bravura), so we don’t try to update these.
If you find, after switching font, that one or more items in the score doesn’t draw as you would expect, you will have to fix up the composite used for that item, which will then save that change into the library saved within a project. The idea is that you will be able to import and export that library into other projects, and even specify that a particular change should be considered your default for new projects created from that point onwards.