There was at least a C&T chipset could provide EMS emulation (with a driver of course). The problem with using INT 15/87 calls is that unless the BIOS uses the 286 version of LOADALL, interrupts stay off for the entire transfer, potentially meaning lost timer ticks, COM interrupts, etc. Most 286 systems go through the insane write-cause-in-CMOS-then-go-through-a-full-system-reset sequence, which takes a comparatively long time. 386 of course, doesn't have the problem.
At any rate, here's something (source and executable) that dumps the last 128K of a 16M memory space. It works on my 286; it'll fail on 386+ boxes with less than 16M of memory because there's nothing at the dump location--you'll err out with an 01 error (memory parity error).
I compiled using 16-bit Microsoft C (8.00d) and libraries. If you use a different compiler, you may need to tweak the code a bit.