I did a quick test to see when the autoip state is set to stop. It looks like that when the IP address becomes non-zero, the DHCP code recognizes the assignment and makes a call to dhcp_stop() which I believe is calling autoip_stop() function coop mode. Here is what the printf debug looks like at assignment (my code is also printing stuff too and please remember I have modified the default IP address pool for my application):
...
dhcp_discover()
transaction id xid(abcd0001)
dhcp_discover: making request
dhcp_discover: realloc()ing
dhcp_discover: sendto(DISCOVER, IP_ADDR_BROADCAST, DHCP_SERVER_PORT)
dhcp_discover: deleting()ing
dhcp_discover: SELECTING
dhcp_discover(): set request timeout 16000 msecs
autoip_tmr() AutoIP-State: 2, ttw=6
autoip_tmr() AutoIP-State: 2, ttw=5
autoip_tmr() AutoIP-State: 2, ttw=4
autoip_tmr() AutoIP-State: 2, ttw=3
autoip_tmr() AutoIP-State: 2, ttw=2
autoip_tmr() AutoIP-State: 2, ttw=1
autoip_tmr() AutoIP-State: 2, ttw=0
autoip_bind(netif=20000778) cd0 192.168.252.11
autoip_tmr() AutoIP-State: 2, ttw=20
autoip_tmr() AutoIP-State: 2, ttw=19
MAIN: Network assigned by DHCP server:
dhcp_stop()
MAIN: IP: 192.168.252.11
MAIN: SN: 255.255.255.0
MAIN: GW: 192.168.252.1
autoip_tmr() AutoIP-State: 0, ttw=18
autoip_tmr() AutoIP-State: 0, ttw=18
autoip_tmr() AutoIP-State: 0, ttw=18