I have a very similar dump, also from a NAND chip with 2048+64 byte pages, and definitely took some effort to figure it out. The ECC bytes for the zero page are as follows, ECC1 matches yours exactly, but ECC2 doesn't, and I can explain why.
ECC1: 0A3AE93943DE09AC8322D0E17FF3 (0A 3A E9 39 43 DE 09 AC 83 22 D0 E1 7F F3)
ECC2: 79E89434A2D6B8411195934B6B5B (79 E8 94 34 A2 D6 B8 41 11 95 93 4B 6B 5B)
It's not easy to figure out, since the implementation is entirely in hardware, and you don't know you are on the right track until you have the exact algorithm and the ECC matches.
Indeed, just looking at some pages full of non-zero data and pages full of zero data makes it relatively simple to figure out the layout. Mine was the same as yours, 0x800 bytes of data is split into [0x0, 0x410), [0x41E, 0x800), [0x802, 0x810) with ECC bytes at [0x410, 0x41E) and [0x810, 0x81E).
Like you note, this suggests two BCH(8304, 8192, 8) codes in GF(2^14), but there's one more hint about the encoding. Zero data bytes trivially produce zero ECC bytes which clearly isn't the case here, so something more must be going on.
The first clue is to realize that it's possible that erased pages (full of FF bytes) also contain valid ECC bytes. The simplest way to achieve that would be to perform the error correction on a bitwise negated version of the page. This would also explain why the zero data page has non-zero ECC bytes, so I always did this as the first step before trying anything else.
I tried to find ECC1 using the zero data page (negated, so all FF) by trying all primitive polynomials of degree 14 in GF(2)[x] to see if anything matches the negated ECC1 bytes. It's not clear how the codeword bits are mapped to the ECC bytes, so I matched on 4 possibilities (normal and reversed byte order, normal and reversed bit order in each byte). But nothing matches, so this seems like a dead end.
The second clue is that the ECC bytes start at 0x410, not 0x400 for some reason. I realized it's possible that ECC1 is actually BCH(8432, 8320, 8) for the first 0x410 data bytes, and ECC2 is BCH(8176, 8064, 8) for the remaining 0x3F0 bytes. And amazingly, this finds a solution, namely x^14+x^10+x^6+x+1 (usually encoded as 0x4443) for ECC1, but nothing matches for ECC2, so we're not done yet.
The third clue is that there's still a lot of unused OOB bytes (all FF), so it's possible that ECC2 also uses 0x410 bytes. And when I added [0x81E, 0x83E) to the data to make it 0x820 bytes long, the ECC2 bytes are now correct using the same algorithm. If I set [0x83C, 0x83E) to 00 with the rest remaining FF, then it matches your ECC2 value. Maybe in your case there's some additional shuffling going if they really are at 0x83A, and not 0x83C.
Sorry for posting this so late, I already had this figured out a few years ago, hopefully it will still be of some help to someone out there.
TL;DR:
It's BCH(8432, 8320, 8) in GF(16384) on negated bytes. ECC1 operates on [0x0, 0x410) plus [0x410, 0x41E). ECC2 operates on [0x41E, 0x800), [0x802, 0x810), [0x81E, 0x83E) plus [0x810, 0x81E).
For an existing algorithm, you can use bch_init(14, 8, 0x4443, true) from
https://gitlab.com/linux-kernel/linux/-/blob/master/lib/bch.c, and call bch_decode on the negated bytes in the ranges above to get the location of the errors.