Good news! I managed to get it working! However, an issue arises where the npc will teleport from the position it should be in to the player's position and then back rapidly. My code is:
func move(target):
move_tween.interpolate_callback(self, 0.45, "move", player.position)
move_tween.interpolate_property(self, "position", position, target, 0)
move_tween.start()
I think this has something to do with the duration in interpolate_property being 0, but if I change that the npc will no longer follow the player's exact movements and it functions the same as how it was before I added in interpolate_callback. I couldn't figure out how to get it working without interpolate_property.