I'd like to know what happens if the block's work function does not finish within the time allotted to it.
Is part of the input/output buffer dropped, or does it interfere with the sample rate of the next blocks?
GNU Radio's flow graph has no notion of time or sample rate; it transfers items (samples) from one block to another whenever some are available, and without ever discarding any. If a block in the middle of a chain is slow, then the buffers between blocks upstream of it will be mostly full, and the buffers between blocks downstream of it will be mostly empty.
This means that all of the responsibility for dealing with time is on the sink and/or source blocks in the flow graph. If samples are taken too slowly from a source attached to some hardware generating samples at a fixed rate, usually it will discard samples that it cannot fit into its output buffer. Thus, everything downstream of the source will see the discard glitch, not just the blocks downstream of the block that is actually the computation bottleneck.