The condition stack is strictly for boolean true/false values. Only comparison and logical operators (>=, and, etc.) modify the conditions stack. Math, numbers, etc. always happen in the integer stack.
For instance, the statement 5 6 > pushes 5 and 6 onto the integer stack. > pulls those values from the integer stack, compares them, and pushes the result onto the condition stack.
Whenever a start or else statement is encountered, the conditions stack is ANDed together. If the resultant value is appropriate (true for start, false for else), then the block is executed. Otherwise flow continues to the executable section.
By default, the stack contains true.
You can use conditional logic soley in the integer stack if you like using "conditionless logic". Basically you use the fact that storing to 0 is a free action. There are other topics on the subject.
Store commands are disabled if they are not in an executing start or else block. Commands that are outside of a proper block, or in a non executing block, are entirely ignored.
If two condition blocks occur back to back, its the latter conditional block that gets used for the next start or else block. The first is executed, but its result gets overwritten.
Last, a single condition block can control multiple consecutive start or else blocks if there are no other condition blocks along the way.