Hmmm... one reason you can get NULL values using the GetControlValue( ) method is because the value of the control you're trying to get is not yet set. I would move the GetControlValue code to the Finish( ) method then (of the final control -- as long as you're positive it is being created last).
Can you use the IIF( ) in the ValueExp of the control that is basing its value on the DateDiff in the Finish method? If you're not familiar with IIF, it is basically "If...then...else":
IIF((DateDiff("D", Date1, Date2)>30), ExpressionA, ExpressionB)
IIF's can be nested as well.
Because they are aggregate controls, they are going through multiple records to 'build' their values; do you have the ValueType property of the aggregate controls set to AutoValueControl or SummaryControl? That might make a difference as well.
To set break points, open the controls' Properties, open a method (if none are overridden, select the Finish method and place the break point on the "End Sub" line; to do this, just place your cursor on that line and hit F9, or go to "Debug" in the menu, and select "Toggle Breakpoint".
Ahhh, Actuate...... so many ways, so much confusion....