(Don't know if its a bug or a feature)
Due to floating point precision, in some cases the following condition is always true:
if ( lastPosition.distanceToSquared( _this.object.position ) > 0 ) {
_this.dispatchEvent( changeEvent );
....
Even when lastPosition and object.position are equal, the resulting distance never gets to absolute zero, is very very small ( ie: 2E-14 ) and the change event never stops.
A fix proposal:
var EPSILON = 0.001;
if ( lastPosition.distanceToSquared( _this.object.position ) > EPSILON ) {