There are three different states that the intended pregnancy needs to exist in:
1. The Person isn't pregnant yet.
You can use the fact that the $birth variable doesn't exist (is undefined) to track this state, this sort of check is also needed to make sure the conception activity doesn't occur while the person is already pregnant. eg. She can't get pregnant if she is currently pregnant.
You can use the ndef operator listed in the TwineScript conditional operator section of the <<if>> macro to determine if a variable has been initialised/assigned a value yet.
<<if ndef $birth>>The person is not pregnant!<</if>>
You should check the state of the $birth variable at the time of conception so that the person doesn't get impregnated again while they are currently pregnant. The following is a modified version of your conception example, if only allow the impregnation of someone whose not currently pregnant, and it correctly set the $birth variable to be equal to the Date/Time of the conception plus 9 months.
<<if ndef $birth and visitedTags("Pregnancy") % 3 is 0>>
<<if $Status is "Happy">>
...and ACTION!
<<set $Status to "Pregnant">>
<<set $birth to clone($gameDate)>>
<<run $birth.setMonth($birth.getMonth() + 9)>>
<</if>>
<</if>>
2. The Person is currently pregnant.
You can use the existence of the $birth variable (is defined) to determine if person is currently pregnant, this is done by using the def operator listed in the TwineScript conditional operator section of the <<if>> macro to determine.
<<if def $birth>>The person is pregnant!<</if>>
You would use this check combine with comparing the $birth variable's value to that of the current value of the $gameDate variable to determine if it is time for the person to give birth. You need to use the <<unset>> macro during the birthing event to stop that event from occurring multiple times for a singe pregnancy, you may also want to update whatever variable you are using to track then number of kids the person has.
<<if def $birth and $birth lte $gameDate>>\
It's time for the birthing event!\
<<unset $birth>>\
<<set $kids to $kids + 1>>\
<<set $Status to "Happy">>
<</if>>
note: The above check needs to occur whenever game time moves forward, which is everytime you cause the value of $gameDate to change within the story.
3. The Person has (just) given birth, so there for can become pregnant again.
Because you have used the <<unset>> macro to un-define the $birth variable during the birthing event the code in point 1 will new correctly indicate that the person is not currently pregnant, and there for the conception code may be used again to get them pregnant again.