BLUEREDGOLDEGGSFEATHERSFEATHERS There's a little-known secret in Banjo-Kazooie that you can interleave the three Cheato codes on the Treasure Trove Cove Sandcastle floor and it will still recognize all of them. So you could, for instance, enter BLUREEGOLDDFFEEGEAATHTHEEGSRSRS, activating BLUEEGGS, REDFEATHERS, and GOLDFEATHERS all at once.
Challenge
Your task is to take a list of cheat codes and a code entry and determine which of the codes are activated.
A code entry is valid if and only if some substring of the entry can spell out a subset of the cheat codes by assigning letters one at a time to exactly one word in order until all codes are exactly filled in. For example, applying this to the above code entry:
BLUREEGOLDDFFEEGEAATHTHEEGSRSRS

BLU_E________E_G_________GS____
___R_E___D_F__E__A_TH__E___RS__
______GOL_D_F___E_A__TH_E____RS

Other Assumptions

Both cheats and entries will contain only uppercase letters A-Z.
Each code in the input list will appear only once.
If two cheat codes share a prefix or a suffix, their shared letters must still appear twice to be counted, thus REDGOLDFEATHERS would, for the purposes of this challenge, only return GOLDFEATHERS.
Each code entry can only contain one matching substring.
If it is ambigous how a code-matching substring could be chosen, choose the one that starts the earliest and is the longest match for that particular starting point.
The order of matched codes returned does not matter.
If it is ambiguous which code could be used, prefer cheat codes that appear earlier in the code list.
A substring does not match if some of the letters inside it cannot be assigned to a cheat code. For instance BLUEXEGGS does not match any cheat codes.
If no codes are matched, you may return an empty list or any falsy value.

Note that this may not necessarily be consistent with the nuances of the game`s implementation
Example Test Cases
Codes:
  BLUEEGGS

Entry: BLUEEGGS

Result:
  BLUEEGGS

Codes:
  BLUEEGGS
  REDFEATHERS
  GOLDFEATHERS

Entry: BANJOGOLDBLUREEDFEATHEERGGSSKAZOOIE

Result:
  BLUEEGGS
  REDFEATHERS

Codes:
  BLUEEGGS
  REDFEATHERS
  GOLDFEATHERS

Entry: KAZOOIEBLUREEGOLDDFFEEGEAATHTHEEGSRSRSBANJO

Result:
  BLUEEGGS
  REDFEATHERS
  GOLDFEATHERS

Codes:
  BLUEEGGS
  REDFEATHERS
  GOLDFEATHERS

Entry: BANJOKAZOOIE

Result: &lt;falsy&gt;

Codes:
  CAT
  DOG

Entry: CCADOGATT

Result:
  DOG
(The substring may not contain the same code twice)

Codes:
  COG
  ATE
  CAT
  DOG

Entry: CDCOAGTE

Result:
  DOG
  CAT
(Match the earliest and longest substring)

Codes:
  ACE
  BDF
  ABC
  DEF

Entry: ABCDEF

Result:
  ACE
  BDF
(Prefer matching codes earlier in the list)

Rules/Scoring
Standard procedure for code golf applies. I/O can use any convenient format. Fewest bytes wins.
Brachylog, 25 bytes

hsS&amp;t⊇.g;Sz{∋ʰ}ᵐhᵍ{tᵐc}ᵐp


Try some of the faster test cases online!

Extremely slow brute force, that I haven't verified on the longer test cases yet. It wouldn't surprise me if a clever implementation of a smarter algorithm turns out considerably shorter. Takes input as a list [entry,codes] through the input variable and outputs through the output variable if it succeeds. Seems to comply fully with the spec to the extent to which I've tested it at all.

The exact nature of the brute force is that for every substring of the entry (until there's a match), it tries every subset of the codes until it's possible to assign one code to each letter of the substring such that the letters assigned to each code taken in order form that code. The worst case complexity, where the worst case is failure, is something vaguely along the lines of \$O(x^22^yy^x)\$ with \$x\$ the length of the entry and \$y\$ the number of codes.