What's the difference between an elastic buffer and an asynchronous FIFO? Are those just two different names for the same circuit?
Yes, they pretty much describe the same thing. There might be some nuances implied by context.
An "elastic buffer" is usually found in bit-serial communications circuits, so they are often of limited width (e.g., just one bit) and limited depth. They are never intended to be completely empty or completely full. They are used to align incoming data with a separate reference signal, or align multiple separate data channels with each other.
An asynchronous FIFO is usually used to transfer multiple-bit words from one clock domain to another, and so are typically more than one bit wide and may be considerably deeper as well.
Because of these differences, the implementation technology might be different, too. They both require some memory with "write" and "read" pointers, but small elastic buffers might be built entirely with flip-flops rather than using a block of static RAM.