A value of 100 can be interpreted as 1 in an item model json predicate.
An example item, in this illustration the item is cod and exists with
tag:{CustomModelData:100,display:{Name:'{"text":"Calamari"}'}}
The following predicate order will incorrectly model the item as if it had CustomModelData:1 which is this example is sushi.
{"predicate": {"custom_model_data":100}, "model": "item/calamari"},
{"predicate": {"custom_model_data":1}, "model": "item/sushi"}
The following predicate order will correctly model the item as CustomModelData:100
{"predicate": {"custom_model_data":1}, "model": "item/sushi"},
{"predicate": {"custom_model_data":100}, "model": "item/calamari"}
It would seem the predicate comparative does not check the entire number and thus accepts 1=100 unless a better magnitude match comes later, 100=100.
This is the same with all range predicates BTW; later values overwrite earlier values, and the inputted value is "VALUE or higher".