Control transfers are special because the transfer size is known ahead of the transfer. The transfer size is specified in wLen of the setup packet. So the host and device know more about them than usual.
For transfers in general, the host will think a transfer is over when the request is exactly satisfied, or a short packet is received. (A short packet is a packet size less than the max packet size.) (It is also an error to send more data than the host is expecting.)
For case 1, the request is exactly satisfied and there is a short packet. So either way, the transfer is over.
For case 2, for a setup transaction, if 64 bytes was asked for, the request will be exactly satisfied, so the transfer will be over after the first packet. If more than 64 bytes was asked for, the device needs to send a short packet. As its already sent all the data it has, it can send a zero length packet. A zero length packet is always an end of transfer and doesn't add to the data transferred.
For case 3, once the device sends a packet less than max packet size, the transfer is over.
As a further note, I said its an error for the device to send more than the host is expecting. In general (apart from setup transactions), the device doesn't know how many bytes the host is expecting. A smart host will alway expect data in multiples of maxpacket. That way it will always get the data the device sends, even if its more than it really wants. Not all hosts are smart, and the device can not worry about whether the host is smart of not, the device should just do what its told.