TL;DR version 
I would question if SLEEP_MODE_PWR_DOWN actually disable the Analog Comparator and assume this might be your problem.
if you have a bit more time:
How would I get to this if I were to analyze your question? well let me think around on how I would think about this to see if that makes sense.
I would first try to see if you set the register correctly.
You want to use the Analog Comparator. typical usage is as follow: sometimes we just need to know wether an analog signal is lower or higher than another signal without the need for comparing two Analog inputs constantly in our code. Only the difference matters and the arduino has two pins we can use to easily detect this: AIN0 and AIN1.
you do
(0 << ACBG) | //AIN0 is applied to the positive input
ACBG is the Analog Comparator Bandage Selection bit. When this bit is set, a fixed bandgap reference voltage (VBG) replaces the positive input to the Analog Comparator. When this bit is cleared, AIN0 is applied to the positive input of the Analog Comparator.
In our Arduino AIN0 and AIN1 associated with Digital pin D6 and D7 respectively on a UNO and to PIN 4 and 5 on an Arduino Mega 2560
You said you have a UNO, so indeed pin 6 and 7 are good.
The analog comparator compares the input values on the positive pin AIN0 (D6) and negative pin AIN1 (D7). When the voltage on the positive pin D6 is higher than the voltage on the negative pin D7, the Analog Comparator Output bit (ACO) is set to HIGH.
So you are correct, if your initial situation is
D7 to 3.3V and D6 to 0V then Analog Comparator Output bit (ACO) is set to LOW
D7 to 3.3V and D6 to 5V then Analog Comparator Output bit (ACO) is set to HIGH
AC0 is bit 5 of the ACSR register and is read only. While you try to force this to 0 in your set up function, I think it's no big deal but best when dealing with register is to use ACSR |= to set bits to 1 and ACSR &= to force some bits to 0
Unless the ACD bit in the ACSR register is set to HIGH the arduino will constantly compare the two values.
As you force that bit to low, this is OK, you are indeed in comparison mode and when the output on the D6 pin is higher then the voltage on the D7 pin, the ACO bit in ACSR is set to HIGH. In this case the interrupt flag ACI will also be set. If the ACIE bit in ACSR and the I bit in the status register SREG is set an interrupt will occur.
So we need the ACIE bit in ACSR to be high, which you do
(1 << ACIE) | //Analog Comparator Interrupt, Enabled
but you don't see to set the I bit in the status register SREG at that stage.
but if I remember correctly in Arduino.h they define
#define interrupts() sei()
#define noInterrupts() cli()
and as you call interrupts(); in your gotoSleep() function before calling sleep_cpu(); you are indeed setting the I bit in SREG
so far so good.
You set
(0 << ACD) | //Comparator, Enabled
When changing bit ACD the analog comparator interrupt must be disabled by clearing the ACIE in ACSR otherwise an interrupt can occur when this bit is changed. In your setup you clear ACD (so enable the comparator) but you set ACIE to High. That's against the spec if you are unlucky and the ACD bit was high before... but by default it's low and you keep it there so probably not an issue.
You set
(0 << ACIC) | //Analog Comparator Input Capture, Disabled
so you disable the Analog Comparator Input Capture. When written to LOW, no connection between the Analog Comparator and the input capture function exists and when written HIGH, the input capture function in Timer/Counter1 can be triggered by the Analog Comparator. The comparator output is in this case directly connected to the input capture front-end logic, making the comparator utilize the noise canceler and edge select features of the Timer/Counter1 Input Capture interrupt and to make the comparator trigger the Timer/Counter1 Input Capture interrupt, the ICIE1 bit in the Timer Interrupt Mask Register (TIMSK1) must be set.
--> You don't use this nor do you set the ICIE1 bit in TIMSK1, so this is coherent and no Timer/Counter1 Input Capture interrupt is enabled
In IDLE mode, we stop the CPU but allow the SPI, USART, Analog Comparator, ADC, 2-wire Serial Interface, Timer/Counters, Watchdog, and the interrupt system to continue operating. so in that sleep mode, your IRQ should trigger.
But your sleep mode is SLEEP_MODE_PWR_DOWN though.
In this mode, the external Oscillator is stopped, while the external interrupts, the 2-wire Serial Interface address watch, and the Watchdog continue operating (if enabled). Only an External Reset, a Watchdog System Reset, a Watchdog Interrupt, a Brown-out Reset, a 2-wire Serial Interface address match, an external level interrupt on INT0 or INT1, or a pin change interrupt can wake up the MCU. This sleep mode basically halts all generated clocks, allowing operation of asynchronous modules only.
Question: by going to SLEEP_MODE_PWR_DOWN, are you actually powering down the Analog Comparator by setting the ACD bit in the Analog Comparator Control and Status Register – ACSR to reduce power consumption?? This would create indeed the situation you see.
--> and that's where reading the Atmel doc at least once in your life (and having a good memory) helps
if you go to the section 10.10 Minimizing Power Consumption
paragraph 10.10.2 Analog Comparator
When entering Idle mode, the Analog Comparator should be disabled if not used.
When entering ADC Noise Reduction mode, the Analog Comparator should be disabled.
In other sleep modes, the Analog Comparator is automatically disabled.
However, if the Analog Comparator is set up to use the Internal Voltage Reference as input, the Analog Comparator should be disabled in all sleep modes. Otherwise, the Internal Voltage Reference will be enabled, independent of sleep mode. Refer to ”Analog Comparator” on page 234 for details on how to configure the Analog Comparator.
So I would think this is probably your pb. One way to check is to use the POWER_MODE_IDLE and see if your code work.
give it a try...