Code:
class Spriteset_Map
  def add_sprite(event)
    @character_sprites.push(Sprite_Character.new(@viewport1,event))
  end
end

class Scene_Map
  def copy_event(map_id,event_id)
    event = Game_Event.new(map_id, load_data(sprintf("Data/Map%03d.rxdata", map_id)).events[event_id])
    $game_map.events[$game_map.events.keys.max+1] = event
    event.id = $game_map.events.keys.max
    @spriteset.add_sprite(event)
    event.refresh
    return event
  end
end

class Game_Event
  def id=(n)
    @id = n
    @event.id = n
  end
end
das problem war, dass die kopierten events immernoch die selbe id hatten und deshalb einige sachen sich auf die ursprungsevents übertragen haben und umgekehrt.
bugs sollten jetzt behoben sein (wobei ich nicht genau weiß was mit dem letzten gemeint war).