I believe one of the panels in BlenderCAM relates to machine properties; this is what I am referring to. It covers machine size as well as what format the output should correspond to. There should be a dropdown and one of the options should be "grbl." Once I have all my machine parameters set up I like to overwrite the Blender default scene (ctrl/command + u I believe) so that these are loaded each time I launch Blender (on that note, I also keep a separate install of Blender just for use with BlenderCAM, which I find helpful as I also use Blender for non-CAM work.
Your understanding of gcode "flavors" is correct (or reasonably close enough to correct that I don't know any better). grbl is the name of the firmware that runs on the control board (there are other types too), and setting the output in Blender ensures that the gcode you generate is of the right type. I have successfully used a "generic" setting in another software with my grbl board, but matching the output type (selecting grbl in BlenderCAM's settings) to the board's firmware type (in this case, grbl) is ideal.
UGS really doesn't care what you are feeding it. It does exactly what its name implies (Universal Gcode Sender) and that's it. It doesn't have enough of a brain to figure out whether the code you are sending is correct for the machine you are sending it to, it just sends it. This means you don't have to worry about UGS being compatible with anything (great!), but you do have to worry about whether your preprocessor (BlenderCAM in this case) is generating gcode of the right type for you board's firmware.
My setup/workflow:
1. Import model into Blender (with the BlenderCAM addon installed) and position it where I want.
2. Generate gcode with BlenderCAM in a format appropriate for my board (grbl) by selecting the appropriate dropdown item in the "Machine Settings" panel of BlenderCAM (or whatever the name is. Again, do not have it open in front of me at the moment).
3. Load that gcode into UGS (a preview of all the toolpaths should show up)
4. Position the cutter head where I want x:0 y:0 z:0 to be and set that as the zero position using the controls in UGS (the upper right button in the "quick actions" panel in UGS IIRC)
5. Run the print and babysit it in case it pauses
If you continue to be stuck I can do screenshots when I have the chance.
Also worth noting someone posted a bundled version of blender with BlenderCAM installed somewhere on this forum (in the help section I think? Sorry you'll have to dig around for that one). This is nice because it's all contained in a single folder, won't mess with other Blender installs, and the gcode automatically exports to the root folder of that Blender install so it's easy to find.