Using millis() function to start at potentiometer reading
The statement TDCRLevel = analogRead(TDCRPot); will almost always set TDCRLevel to a non-zero value; hence the &amp;&amp; TDCRLevel term of your last if statement almost always is satisfied.  The only time it won't be satisfied is when TDCRLevel is exactly zero.

When TDCRLevel &gt;= 1000 is first satisfied, it's likely to be true for some while; during that time, each pass through loop() will toggle Bluestate and set previousMillisBlue = currentMillis.  This happens many times per millisecond while TDCRLevel has a high value.  Whether Bluestate is on or off when  TDCRLevel goes below 1000 is a fairly random outcome.

To handle the process properly, set up a state machine, using either one state-number variable or several variables to maintain state.  Change states when conditions tied to state, TDCRLevel, and time are met.

More simply, something like the following might work.  

loop:
  if !P1 and L &gt; Plim1:
    Set P1; record T1
  if P1 and T-T1 &gt; Tlim and L &gt; Plim2:
    Set P2
  if (P1 or P2) and L &lt; Llim:
    Turn off pumps, clear P1 and P2


where P1, P2 represent pump states; T represents current time and T1 represents time that P1 most recently turned on; L = analogRead(TDCRPot); Plim1 and 2 are pot levels for pump turnons; Llim = low level for pump turnoffs; Tlim = desired time delay before pump 2 comes on.



Edit 1:  The above is pseudocode, rather than any simulacrum of valid C or C++.  As such, you may need to add sets of parentheses and brackets, substitute meaningful variable names, etc.

Note that the constants Plim1, Plim2, Tlim, Llim should be declared via either const int declarations, or via enum {} constructs (enum declares only integer constants), if they are integers rather than floats.  For example, do like either of

const int Plim1 = 1000; // level for pump1 turnon
const int Plim2 = 1000; // level for pump2 turnon
//etc


or

enum { Plim1=1000, Plim2=1000, Tlim=3000, Llim=100};


The phrase “Set P1; record T1” corresponds to code like

P1 = true;
digitalWrite(Pump1, HIGH);
T1 = millis();


in braces.  If you don't set P1 and record T1 as current time, the process won't work.  P1 and P2 represent state variables, not constants.

The phrase “if P1 and T-T1 > Tlim and L > Plim2: Set P2” corresponds to code like

if (P1 &amp;&amp; (T - T1 &gt; Tlim) &amp;&amp; (L &gt; Plim2)) {
  P2 = true;
  digitalWrite(Pump2, HIGH);
}


The phrase “if (P1 or P2) and L &lt; Llim: Turn off pumps, clear P1 and P2” corresponds to code like

if((P1 || P2) &amp;&amp; (L &lt; Llim)) {
  P1 = P2 = false;
  digitalWrite(Pump1, LOW);
  digitalWrite(Pump2, LOW);
}