@ArcadeEd - I actually spent a long time on this after your suggestion, and eventually decided on adding the variables for the condition to the object was in fact just easier to manage. But for additional details like time remaining, times hit, etc. that might be used by the status are stored in a dictionary that is created when the status is applied and linked to the object via UID.
I know it probably sounds a bit much, but it has really made it much easier to manage and debug. With arrays it just takes a little more eventing time to extract the information and when you run into a problem there's a lot more possible reasons for it.