Program: 81878
Project: 81878
Buggy source:
@SideOnly(Side.CLIENT) public void tickRender(float partialTick){
  super.tickRender(partialTick);
  if (!WeatherUtil.isPaused()) {
    int count=8 + 1;
    ParticleBehaviorFog.newCloudWay=true;
    Iterator<Map.Entry<Integer,EntityRotFX>> it=lookupParticlesCloud.entrySet().iterator();
    while (it.hasNext()) {
      Map.Entry<Integer,EntityRotFX> entry=it.next();
      EntityRotFX ent=entry.getValue();
      if (!ent.isAlive()) {
        it.remove();
      }
 else {
        int i=entry.getKey();
        Vec3 tryPos=null;
        if (i == 0) {
          tryPos=new Vec3(pos.xCoord,layers.get(layer),pos.zCoord);
        }
 else {
          double spawnRad=120;
          double speed=2D / (spawnRad);
          if (isSpinning()) {
            speed=50D / (spawnRad);
          }
          double offsetRotationPrev=((ticksExisted - 1) % 360) * speed;
          double offsetRotationNext=(ticksExisted % 360) * speed;
          double offsetRotation=offsetRotationPrev + (offsetRotationNext - offsetRotationPrev) * partialTick;
          double rad=Math.toRadians(offsetRotation + ((360D / (double)(count - 1)) * ((double)(i - 1))));
          double x=-Math.sin(rad) * spawnRad;
          double z=Math.cos(rad) * spawnRad;
          tryPos=new Vec3(pos.xCoord + x,layers.get(layer),pos.zCoord + z);
          ent.setAge(100);
        }
        ent.setPosition(tryPos.xCoord,tryPos.yCoord,tryPos.zCoord);
      }
    }
    count=16 + 1;
    it=lookupParticlesCloudLower.entrySet().iterator();
    while (it.hasNext()) {
      Map.Entry<Integer,EntityRotFX> entry=it.next();
      EntityRotFX ent=entry.getValue();
      if (!ent.isAlive()) {
        it.remove();
      }
 else {
        int i=entry.getKey();
        Vec3 tryPos=null;
        if (i == 0) {
          tryPos=new Vec3(pos.xCoord,layers.get(layer),pos.zCoord);
        }
 else {
          double spawnRad=80;
          double speed=50D / (spawnRad);
          double offsetRotationPrev=((ticksExisted - 1) % 360) * speed;
          double offsetRotationNext=(ticksExisted % 360) * speed;
          double offsetRotation=offsetRotationPrev + (offsetRotationNext - offsetRotationPrev) * partialTick;
          double rad=Math.toRadians(offsetRotation + ((360D / (double)(count - 1)) * ((double)(i - 1))));
          double x=-Math.sin(rad) * spawnRad;
          double z=Math.cos(rad) * spawnRad;
          tryPos=new Vec3(pos.xCoord + x,layers.get(layer) - 20,pos.zCoord + z);
          double var16=this.pos.xCoord - ent.getPosX();
          double var18=this.pos.zCoord - ent.getPosZ();
          ent.rotationYaw=(float)(Math.atan2(var18,var16) * 180.0D / Math.PI) - 90.0F;
          ent.rotationPitch=-20F;
          ent.setScale(800);
          ent.setAge(100);
        }
        ent.setPosition(tryPos.xCoord,tryPos.yCoord,tryPos.zCoord);
      }
    }
  }
}

Fixed version (ground truth):
@SideOnly(Side.CLIENT) public void tickRender(float partialTick){
  super.tickRender(partialTick);
  if (!WeatherUtil.isPaused()) {
    int count=8 + 1;
    ParticleBehaviorFog.newCloudWay=true;
    Iterator<Map.Entry<Integer,EntityRotFX>> it=lookupParticlesCloud.entrySet().iterator();
    while (it.hasNext()) {
      Map.Entry<Integer,EntityRotFX> entry=it.next();
      EntityRotFX ent=entry.getValue();
      if (!ent.isAlive()) {
        it.remove();
      }
 else {
        int i=entry.getKey();
        Vec3 tryPos=null;
        double spawnRad=120;
        double speed=2D / (spawnRad);
        if (isSpinning()) {
          speed=50D / (spawnRad);
        }
        ent.rotationSpeedAroundCenter=(float)speed;
        if (i == 0) {
          tryPos=new Vec3(pos.xCoord,layers.get(layer),pos.zCoord);
          ent.rotationYaw=ent.rotationAroundCenter;
        }
 else {
          double rad=Math.toRadians(ent.rotationAroundCenter - ent.rotationSpeedAroundCenter + (ent.rotationSpeedAroundCenter * partialTick));
          double x=-Math.sin(rad) * spawnRad;
          double z=Math.cos(rad) * spawnRad;
          tryPos=new Vec3(pos.xCoord + x,layers.get(layer),pos.zCoord + z);
          double var16=this.pos.xCoord - ent.getPosX();
          double var18=this.pos.zCoord - ent.getPosZ();
          ent.rotationYaw=(float)(Math.atan2(var18,var16) * 180.0D / Math.PI) - 90.0F;
        }
        ent.setPosition(tryPos.xCoord,tryPos.yCoord,tryPos.zCoord);
      }
    }
    count=16 * 2;
    it=lookupParticlesCloudLower.entrySet().iterator();
    while (it.hasNext()) {
      Map.Entry<Integer,EntityRotFX> entry=it.next();
      EntityRotFX ent=entry.getValue();
      if (!ent.isAlive()) {
        it.remove();
      }
 else {
        int i=entry.getKey();
        Vec3 tryPos=null;
        ent.setScale(800);
        double countPerLayer=16;
        double rotPos=i % 16;
        int layerRot=i / 16;
        double spawnRad=80;
        if (layerRot == 1) {
          spawnRad=60;
          ent.setScale(600);
        }
        double speed=50D / (spawnRad * 2D);
        ent.rotationSpeedAroundCenter=(float)speed;
        double rad=Math.toRadians(ent.rotationAroundCenter - ent.rotationSpeedAroundCenter + (ent.rotationSpeedAroundCenter * partialTick));
        double x=-Math.sin(rad) * spawnRad;
        double z=Math.cos(rad) * spawnRad;
        tryPos=new Vec3(pos.xCoord + x,layers.get(layer) - 20,pos.zCoord + z);
        ent.setPosition(tryPos.xCoord,tryPos.yCoord,tryPos.zCoord);
        double var16=this.pos.xCoord - ent.getPosX();
        double var18=this.pos.zCoord - ent.getPosZ();
        ent.rotationYaw=(float)(Math.atan2(var18,var16) * 180.0D / Math.PI) - 90.0F;
        ent.rotationPitch=-20F;
      }
    }
  }
}