Program: 33902
Project: 33902
Buggy source:
/** 
 * Revoke temporary perms Removes flymode with a delay if player leave his island.
 * @param e
 */
@EventHandler(priority=EventPriority.NORMAL,ignoreCancelled=true) public void onPlayerLeaveIsland(IslandExitEvent e){
  final Player player=plugin.getServer().getPlayer(e.getPlayer());
  if (!plugin.getGrid().playerIsOnIsland(player)) {
    if (VaultHelper.checkPerm(player,Settings.PERMPREFIX + "String_Node_Str") && player.isFlying() && player.getGameMode().equals(GameMode.SURVIVAL)) {
      plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin,new Runnable(){
        @Override public void run(){
          if (!plugin.getGrid().playerIsOnIsland(player) && player.isFlying()) {
            player.setAllowFlight(false);
            player.setFlying(false);
          }
        }
      }
,20 * Settings.flyTimeOutside);
    }
    for (    String perm : Settings.temporaryPermissions) {
      if (temporaryPerms.containsKey(player.getUniqueId()) && VaultHelper.checkPerm(player,perm)) {
        VaultHelper.removePerm(player,perm);
        List<String> perms=temporaryPerms.get(player.getUniqueId());
        perms.remove(perm);
        if (perms.isEmpty())         temporaryPerms.remove(player.getUniqueId());
 else         temporaryPerms.put(player.getUniqueId(),perms);
      }
    }
  }
}

Fixed version (ground truth):
/** 
 * Revoke temporary perms Removes flymode with a delay if player leave his island.
 * @param e
 */
@EventHandler(priority=EventPriority.NORMAL,ignoreCancelled=true) public void onPlayerLeaveIsland(IslandExitEvent e){
  if (DEBUG)   plugin.getLogger().info("String_Node_Str");
  final Player player=plugin.getServer().getPlayer(e.getPlayer());
  if (!plugin.getGrid().locationIsOnIsland(player,e.getLocation())) {
    if (DEBUG)     plugin.getLogger().info("String_Node_Str");
    if (VaultHelper.checkPerm(player,Settings.PERMPREFIX + "String_Node_Str") && player.isFlying() && player.getGameMode().equals(GameMode.SURVIVAL)) {
      if (DEBUG)       plugin.getLogger().info("String_Node_Str" + Settings.flyTimeOutside + "String_Node_Str");
      if (Settings.flyTimeOutside == 0) {
        player.setAllowFlight(false);
        player.setFlying(false);
        if (DEBUG)         plugin.getLogger().info("String_Node_Str");
      }
 else {
        plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin,new Runnable(){
          @Override public void run(){
            if (!plugin.getGrid().playerIsOnIsland(player) && player.isFlying()) {
              player.setAllowFlight(false);
              player.setFlying(false);
              if (DEBUG)               plugin.getLogger().info("String_Node_Str");
            }
          }
        }
,20 * Settings.flyTimeOutside);
      }
    }
    for (    String perm : Settings.temporaryPermissions) {
      if (temporaryPerms.containsKey(player.getUniqueId()) && VaultHelper.checkPerm(player,perm)) {
        VaultHelper.removePerm(player,perm);
        if (DEBUG)         plugin.getLogger().info("String_Node_Str" + perm);
        List<String> perms=temporaryPerms.get(player.getUniqueId());
        perms.remove(perm);
        if (perms.isEmpty())         temporaryPerms.remove(player.getUniqueId());
 else         temporaryPerms.put(player.getUniqueId(),perms);
      }
    }
  }
}