You can use labels to change the icons using a wildcard, but those don't affect the icon shown in the folder tab, which is always the one Windows shows.
Windows doesn't have a way to recursively change icons on its side; it'd need to be done on each folder individually. That can be automated somewhat, by copying the hidden desktop.ini file the icon assignment is stored in, and setting the R attribute on the folder itself (but not the files in the folder), but is a bit of a pain and would also have to be re-done when new folders are created in the same place.
May I ask, is there a reason for that? I was also wondering why the icon from Labels is ignored by Tabs (same as by Preferences, but it's less of a trouble).
if it any help to revisit this idea of folder tab icons.
after of a couple days of tinkering with status bar codes i discovered this little gem of code which is working to show an icon that's sticky down through the dir.
not sure how it would translate to being used in place of the shell tab\folder icons via Preferences / Folder Tabs / Options
// drive letter & // custom location icons
{dlet}\
{h!{ifpath:"C:\Users\CLOUDEN\Documents\Notes MD(|\*)"}}{i:C:\xsysicons\icons extracted from software\obsidian logo 256x256.ico}{h!}
{h!{ifpath:"C:\Users\CLOUDEN\Documents\AutoHotkey(|\*)"}}{i:C:\xsysicons\tengo ico export\preferences-desktop-hotkeys keyboard-shortcuts_32x32.ico}{h!}
{h!{ifpath:"C:\Users\CLOUDEN\Downloads(|\*)"}}{i:C:\xsysicons\win10_shell32\imageres_184 download arrow down single layer 32x32.ico}{h!}
//template line for custom icons per-dir // duplicate, ....fill...., uncomment, & place in line above^^
//{h!{ifpath:"....paste forlder path here....(|\*)"}}{i:....paste path to icon here....}{h!}
{h!}
displays as...
at the moment
i have this as one a long run-on string of code
so there won't be | between C:\ and the e.g. ...
but will probably have to get used to that. this string will become confusing if i break an icon by rename and have to hunt it down to fix it.