This also doesn't properly update the clut if clutBase changes.  `clutFormat` here is only `gstate.clutformat & 3`.  This function is only called when those 2 bits change also:

```
		clutformat = gstate.clutformat & 3;
		if (clutLastFormat_ != clutformat) {
			// We update here because the clut format can be specified after the load.
			UpdateCurrentClut();
		}
```

If these changes are needed, that (but not clutformat, which is used later) needs to change, e.g.:

```
clutLastFormat_ = gstate.clutformat;

if (clutLastFormat_ != gstate.clutformat) {
```

Actually, this might be needed anyway, because of the font optimization.  It will probably only hurt performance a little bit on games that use clut masks or offsets dynamically, which I think are rare.

Otherwise, if just the base changes, your code changes will mean the clut is wrong.  But, maybe that's what's fixing things here.  If so, that may help shed light on the actual problem.

-[Unknown]