First, let's go back to basics to answer why theta can be both positive and negative, and why it's referred to as time decay? At it's core, an option's value is composed of two components:
- intrinsic value, and
- time value.
As time passes, the proportion of the 'time value' gradually decreases until the option is worth exactly its intrinsic value at its expiration. Theta is simply the rate at which the option losses its value as time passes (all other market conditions remaining unchanged). Hence theta is offen referred to as time decay.
As you have mentioned, although theta can be positive (where time value is negative), almost all options lose value as time passes. This is why the convention has been to express theta as a negative number.
Instances of negative time value and hence postive theta are relatively rare and assume European option contracts deep in the money (ITM) with stock-type settlement.
This positive theta or negative time value is the effect of interest rates.
In the case of positive interest rates, for deep ITM puts the present value of the strike (K) less the underlying price (S) can increase day-to-day and hence have a positive theta. In this case, the present value of the strike (K) has increased in value. If this were an American option, everyone would exercise the option today to earn interest on the intrinsic value.
To consider the same circumstances with European calls, one has to imagine a world with negative interest rates. In this case, a deep ITM call option's present value of the underlying price (S) less the strike (K) can increase day-to-day. In this case you (the holder of the call option) have to pay the strike (K), and in a world with negative interest rates would be receiving interest on this amount with each passing day.