Yes - there is an important difference, and I perhaps I should have distinguished Objo’s language model from its VM implementation more clearly.
In .NET, this is genuine boxing:
object foo = 12;
The CLR allocates a boxed System.Int32 on the managed heap and copies 12 into it. Casting back checks the boxed type and copies the value out. It is therefore more than an ordinary reference upcast.
Objo works differently. Every VM storage location (locals, properties and array elements) contains the same universal, tagged Value. An integer is stored inline in that value together with an Integer type tag; class instances are represented by references in the same kind of value.
Consequently:
Var foo As Object = 12
does not allocate an integer wrapper or otherwise change its representation. The compiler merely treats foo statically as Object; at runtime it remains an Integer-tagged value. Casting it back with Integer(foo) performs a type-tag check and returns the same value. There is a checking cost, but no .NET-style heap allocation or unboxing copy.
TreeViewNode.Tag likewise stores that universal Value directly. Assigning 12 to it stores the inline Integer value, not a newly allocated object wrapper.
This also means Array(Of Integer) versus Array(Of Object) is only partly analogous to List<int> versus List<object>. Both Objo arrays currently use the same Value representation internally. The generic element type provides compile-time safety and avoids explicit casts, but it does not produce specialised integer storage. In .NET, by contrast, List<int> avoids boxing whereas placing integers in List<object> boxes each one (one of the performance benefits of .NET generics).
So the short version is:
Objo: Var foo As Object = 12
Upcast of an already tagged universal value; no wrapper allocation.
C#: object foo = 12;
Boxes an Int32 into a newly allocated heap object.
Your intuition about the distinction was therefore correct. My earlier “not boxing” comment referred specifically to Objo’s language and VM representation, not merely to different terminology for the same CLR operation.