I'm not 100% sure why, but shuffling everything around the timer worked. Doing so eliminated the can_shoot variable as well. The original setup was simple enough, I'm still not sure why it didn't work originally. New code is below. Thanks for your help!
Edit: Is it possible to emit the shoot signal on a certain frame of animation? I made a 20 frame animation of a minigun spooling up, shooting, then spooling down and I just want to time a burst in the middle.
func _on_firing_animation_finished():
$AnimatedSprite.play("default")
func _on_GunTimer_timeout():
$AnimatedSprite.play("firing")
$AnimatedSprite.connect("animation_finished", self, "_on_firing_animation_finished")
emit_signal('shoot', Bullet, $Position2D.global_position)
$GunTimer.start()