Finally a sub-40, but I know it could've been much better, considering I was at F2L-1C after 14 moves. Any suggestions?

Scramble: R2 D2 B' D2 F2 D2 U2 L2 F L2 F' U B' F2 R2 U R B F' D U2

F' U B U' B' U [2x2x2]

L D L' D2 [2x2x3]

F' D' F2 D [F2L -1C]

F' U B U' B' U // 2x2x2

L D L' D2 // 2x2x3

//F' D' F2 D

U F' U' D' F2 D // F2L

B' R' D' R D B // edges; ab3c

I tried inserting a U and U' around the F' in your solution to flip two edges, and while there are still two misoriented edges in the LL, now you can fix it with a single fruruf. This leaves 3 unsolved corners.

Edit: Here are some other alternatives.

You can use the eight-move pure OLL alg R U R2 F R F2 U F to flip the two edges. Fun fact: this alg is actually three sledgehammers cancelled into each other: (U' R U R') (R' F R F') (F' U F U').

Or you can switch to the inverse, use a sledgehammer to orient the edges, then reinsert the F2L edge. There are two ways to sledgehammer, leading to two different skeletons.

… F' D' F2 D // F2L-1 (4/14)

(F D' F' D R' D R D' R2) // edges; ab5c (9/23)

… F' D' F2 D // F2L-1 (4/14)

(D' F D F' R F' R' F R2) // edges; ab4c (9/23)

But in both of these cases, there are some other things you can do after the sledgehammer. This first one is pretty obvious: rather than inserting only the edge, you pair it up with the corner and then insert.

… F' D' F2 D // F2L-1 (4/14)

(F D' F') // EO (3/17)

(D2 R' D' R D R' D' R') // F2L; ab3c (8/25)

The second one is weirder. After the sledgehammer, you'll see that there's actually a bunch of pairs lying around, and, you know, wouldn't it be a waste to destroy them?

… F' D' F2 D // F2L-1 (4/14)

(D' F D F' R2) // EO + align (5/19)

At this point, you need to cycle the three pairs. You can't use an 8-move commutator here, but you

*can* set it up to an 8-move case with a single move.

… (D' F D F' R2) // EO + align (5/19)

(F Dw2 L' U2 L Dw2 L' U2 L F') // block commutator (10/29)

… (D' F D F' R2) // EO + align (5/19)

(F2 R B' Lw2 B R' B' Lw2 B F2) // block commutator (10/29)

(stealth edit: fixed the move counts of the last few examples)