Program: 81905
Project: 81905
Buggy source:
@Override public void update(){
  if (!worldObj.isRemote) {
    weatherSize=100;
    if (worldObj.getTotalWorldTime() % 40 == 0) {
      if (lastTickStormObject != null && lastTickStormObject.isDead) {
        lastTickStormObject=null;
      }
      if (lastTickStormObject == null) {
        WeatherManagerServer manager=ServerTickHandler.lookupDimToWeatherMan.get(worldObj.provider.getDimension());
        if (manager != null) {
          StormObject so=new StormObject(manager);
          so.initFirstTime();
          so.pos=new Vec3(getPos().getX(),StormObject.layers.get(0),getPos().getZ());
          so.layer=0;
          so.userSpawnedFor="String_Node_Str" + getPos().getX() + getPos().getY()+ getPos().getZ();
          so.naturallySpawned=false;
          manager.addStormObject(so);
          manager.syncStormNew(so);
          lastTickStormObject=so;
        }
      }
    }
    if (lastTickStormObject != null && !lastTickStormObject.isDead) {
      Random rand=new Random();
      if (lockStormHere) {
        lastTickStormObject.pos=new Vec3(getPos().getX(),StormObject.layers.get(0),getPos().getZ());
      }
      lastTickStormObject.size=weatherSize;
      lastTickStormObject.levelWater=1000;
      lastTickStormObject.attrib_precipitation=true;
      lastTickStormObject.hasStormPeaked=false;
      lastTickStormObject.levelCurStagesIntensity=0.9F;
      lastTickStormObject.levelCurIntensityStage=StormObject.STATE_NORMAL;
      lastTickStormObject.stormType=StormObject.TYPE_LAND;
      lastTickStormObject.levelTemperature=40;
      if (weatherType == 0) {
        lastTickStormObject.levelTemperature=-40;
      }
 else       if (weatherType == 1) {
      }
 else       if (weatherType == 2) {
        lastTickStormObject.stormType=StormObject.TYPE_LAND;
        lastTickStormObject.levelCurIntensityStage=StormObject.STATE_THUNDER;
      }
 else       if (weatherType == 3) {
        lastTickStormObject.stormType=StormObject.TYPE_LAND;
        lastTickStormObject.levelCurIntensityStage=StormObject.STATE_HIGHWIND;
      }
 else       if (weatherType == 4) {
        lastTickStormObject.stormType=StormObject.TYPE_LAND;
        lastTickStormObject.levelCurIntensityStage=StormObject.STATE_HAIL;
      }
 else       if (weatherType == 5) {
        lastTickStormObject.stormType=StormObject.TYPE_LAND;
        lastTickStormObject.levelCurIntensityStage=StormObject.STATE_STAGE1;
      }
 else       if (weatherType == 6) {
        lastTickStormObject.stormType=StormObject.TYPE_WATER;
        lastTickStormObject.levelCurIntensityStage=StormObject.STATE_STAGE1;
      }
    }
  }
}

Fixed version (ground truth):
@Override public void update(){
  if (!worldObj.isRemote) {
    weatherSize=100;
    if (worldObj.getTotalWorldTime() % 40 == 0) {
      if (lastTickStormObject != null && lastTickStormObject.isDead) {
        lastTickStormObject=null;
      }
      if (lastTickStormObject == null && lastTickStormObjectID != -1) {
        WeatherManagerServer manager=ServerTickHandler.lookupDimToWeatherMan.get(worldObj.provider.getDimension());
        if (manager != null) {
          StormObject obj=manager.getStormObjectByID(lastTickStormObjectID);
          if (obj != null) {
            lastTickStormObject=obj;
            Weather.dbg("String_Node_Str" + obj.ID + "String_Node_Str");
          }
        }
      }
      if (lastTickStormObject == null) {
        WeatherManagerServer manager=ServerTickHandler.lookupDimToWeatherMan.get(worldObj.provider.getDimension());
        if (manager != null) {
          StormObject so=new StormObject(manager);
          so.initFirstTime();
          so.pos=new Vec3(getPos().getX(),StormObject.layers.get(0),getPos().getZ());
          so.layer=0;
          so.userSpawnedFor="String_Node_Str" + getPos().getX() + getPos().getY()+ getPos().getZ();
          so.naturallySpawned=false;
          manager.addStormObject(so);
          manager.syncStormNew(so);
          lastTickStormObject=so;
          lastTickStormObjectID=so.ID;
        }
      }
    }
    if (lastTickStormObject != null && !lastTickStormObject.isDead) {
      Random rand=new Random();
      if (lockStormHere) {
        lastTickStormObject.pos=new Vec3(getPos().getX(),StormObject.layers.get(0),getPos().getZ());
      }
      lastTickStormObject.size=weatherSize;
      lastTickStormObject.levelWater=1000;
      lastTickStormObject.attrib_precipitation=true;
      lastTickStormObject.hasStormPeaked=false;
      lastTickStormObject.levelCurStagesIntensity=0.9F;
      lastTickStormObject.levelCurIntensityStage=StormObject.STATE_NORMAL;
      lastTickStormObject.stormType=StormObject.TYPE_LAND;
      lastTickStormObject.levelTemperature=40;
      if (weatherType == 0) {
        lastTickStormObject.levelTemperature=-40;
      }
 else       if (weatherType == 1) {
      }
 else       if (weatherType == 2) {
        lastTickStormObject.stormType=StormObject.TYPE_LAND;
        lastTickStormObject.levelCurIntensityStage=StormObject.STATE_THUNDER;
      }
 else       if (weatherType == 3) {
        lastTickStormObject.stormType=StormObject.TYPE_LAND;
        lastTickStormObject.levelCurIntensityStage=StormObject.STATE_HIGHWIND;
      }
 else       if (weatherType == 4) {
        lastTickStormObject.stormType=StormObject.TYPE_LAND;
        lastTickStormObject.levelCurIntensityStage=StormObject.STATE_HAIL;
      }
 else       if (weatherType == 5) {
        lastTickStormObject.stormType=StormObject.TYPE_LAND;
        lastTickStormObject.levelCurIntensityStage=StormObject.STATE_STAGE1;
      }
 else       if (weatherType == 6) {
        lastTickStormObject.stormType=StormObject.TYPE_WATER;
        lastTickStormObject.levelCurIntensityStage=StormObject.STATE_STAGE1;
      }
    }
  }
}