Normal logic that Benefit Auto-Renew uses to set dates
Pre 5.0.19, option E013929
With option E013929
Gift Date
The date that BAR was run
This can be set in a parameter for the BAR procedure called “New Gift Date for the Pledge” it must be within 30 days of the date you schedule it.
Schedule Start Date
(sustainers package)
Must be greater than or equal to gift date. First, find when the last payment was made on the previous pledge. Use date_last_pulled for EF or CH payment method types and date_last_billed for others.  If those fields are null, use the schedule_end_date from the previous pledge. Then add one payment cycle to that date (i.e. 1 month for a monthly pledge).
Schedule End Date
For CALENDAR renewal basis will be 12/31 of the year after the new gift date, if your expiration date preference is “Last” day of the month or the following day, on 1/1 if the expiration date preference is “First”. For a FISCAL renewal basis this date is altered by the fiscal year offset.
Same, except the gift date was set differently as shown above.

2) Why is it not pulling on Jan 1st when "Pull Charge Installments on First of Month" preference is set? The start date is set to 1 month after the date last pulled because the above logic still applies. "Pull Charge Installments on First of Month" does not apply for the first payment on a pledge so accounts that signed up in December were last pulled in mid December and get a start date in mid December.