The method by itself could get called multiple times, as the framework sometimes creates dummy instances, as some data isn't available to the inner core of the runtime other than through instances. Creating these instances is almost free (it's very fast, so it's not like this slows down performance), however it indeed has the side effect of having these methods getting called too. It's not the same entity object however. If you check this.ObjectID every time your OnInitialized method is called, it's a different Guid each time. The first one is for the entity factory factory which is run once. These dummy instances are thrown away after they've been used.
To be sure, you can check whether the initialization already has taken place, e.g. when you're setting things up for all instances of a given type. If you're using validation rules, another way to do this is by using a validator instance which is injected with dependency injection. This creates bigger decoupling as you then don't need to add code to the generated class assembly through partial classes.
So the method is called once per entity class instance, but for fetching 1 entity it can be called multiple times, once for each entity class instance that's been created along the way.
It's a side effect of our distributed system internally (no central context/session), where one object needs information to decide something and creates a dummy to do so, before proceeding. E.g. to produce a query it creates a dummy (for the fields and other info), to fetch the query it uses a different object, namely one created from a factory as the query might return more than 1 element (it doesn't know that at that point, nor does it care). When initializing the system it builds a factory cache which too creates dummies (once).