MQTT Transmission does always use the timestamp from the tag change event time except in one case - and that is in the Sparkplug BIRTH message. That uses a timestamp of ‘now’. The reason for this, is that when the connection is lost between the Edge (Transmission) and the Host Application (Engine), MQTT Engine sets the tag quality to BAD_STALE for all tags and uses the timestamp of ‘now’.
When MQTT Transmission comes back online, if any tags hadn’t changed, the timestamp could be before the BAD_STALE event in Engine. This would cause a couple of problems. For one, this is a duplicate event which would cause a collision in the historian if tag history was used. Also, the timeline of events would be invalid. At this point, it would appear that the tag is still BAD_STALE until a new/true tag change event occurs.