Items in D:OS1 also do not stack if they are different to the engine.
Different parameters for item scripts or the existence of one when the root template has none can make objects look different to the engine.
This is the case especially for all items that have the HiddenPerception.itemScript attached.
(e.g. the moonstone close to the Cyseal north gate waypoint will never stack because of the attached scripts, as is the case for a lot of hidden rubies.)
A bunch of candles in D:OS1 could not stack even with the same RT because they had a parameter explicitely set which was saved in the object itself because it was not the default. At some point, Larian must have decided to change the default in Torch.itemScript, but the candles were not adjusted, so it ended with some candles having no script parameter info in the object while others had it, although the parameter was exactly the same. (was something like 'EXTERN INT:%StartLit...' as far as I remeber.)
That made those candles different things for the engine although they were absolutely identical in their setting.
@Abraxas: you know that items on stacks loose their handle, which must not happen if there is a difference. Since the engine does not know that the 'hide it' item script is actually no longer needed, it cannot remove the script. It would require some kind of 'EndGoal;' like in Osiris to inform the engine that the script has served its purpose and will NEVER again be executed. In this case it can be detached and the resulting object looks exactly like all the other objects with that RT/Stat and without a script.
A name set for the object can probably make it unstackable as well, or a description change, basically everthing that gives the object a difference from its 'RT brethren', because that info must always be preserved and must be reconstructible when a single item is moved off a stack.