Because recurring event's exist this has been difficult for me in the past. I've usually had to limit it to a particular month and then eliminate items that didn't meet my criteria in code after the query returns. I know it sucks but it's the only way I've been able to get all of the events.
Below is the spquery code I've used before. The key is the expandrecurrance and the calendardate properties.
SPQuery eventQuery = new SPQuery();
eventQuery.ExpandRecurrence = true;
eventQuery.CalendarDate = new DateTime("12/20/2012");
The SPUtility.CreateISO8601DateTimeFromSystemDateTime function is handy when trying to create your caml. Below is some caml that worked for me, the key is the daterangesoverlap section which helps bring in all of the recurring events for the month. Also, since i'm usually outputting a monthly calendar, I bring in events from the previous and next months to make sure they show correctly when the monthly calendar shows events in the same week for a previous or next month. You can probably adjust the dates to be more exact since you are talking about a single day.
<Where>
<Or>
<DateRangesOverlap>
<FieldRef Name="EventDate" />
<FieldRef Name="EndDate" />
<FieldRef Name="RecurrenceID" />
<Value Type="DateTime">
<Month>12</Month>
<Year>2012</Year>
</Value>
</DateRangesOverlap>
<Or>
<And>
<Geq>
<FieldRef Name='EventDate' />
<Value Type='DateTime'>2012-11-20T00:00:00Z</Value>
</Geq>
<Leq>
<FieldRef Name='EventDate' />
<Value Type='DateTime'>2013-01-20T00:00:00Z</Value>
</Leq>
</And>
<And>
<Geq>
<FieldRef Name='EndDate' />
<Value Type='DateTime'>2012-11-20T00:00:00Z</Value>
</Geq>
<Leq>
<FieldRef Name='EndDate' />
<Value Type='DateTime'>2013-01-20T00:00:00Z</Value>
</Leq>
</And>
</Or>
</Or>
</Where>
<Where><Eq><FieldRef Name='EventDate' /> <Value Type='DateTime'><Today /> </Value></Eq></Where>