Sorry, I am not familiar with associations
Sorry for the distraction then. Associations aren't inherent to the problem you're trying to solve. I was just trying to demonstrate how to transform between representations.
I'll try to refactor your code later. I only have a couple of minutes right now. So for now, I'll just try to explain why it failed.
Here's your definition for fflat1 (I'm removing the comments for clarity)
fflat1[Sequence @@ Flatten[{flag_, LRc_, cL_}]] := cL[[1]]
If you look at just the argument list you created, it looks like this.
Sequence @@ Flatten[{flag_, LRc_, cL_}]
(* Sequence[flag_, LRc_, cL_] *)
So, your function expects exactly three arguments. But when you tried to apply it:
fflat1[Sequence @@ Flatten[{1, 0.1, cout0L}]]
you actually provided 6 arguments:
Sequence @@ Flatten[{1, 0.1, cout0L}]
(* Sequence[1, 0.1, 4., 4., 4., 4.] *)
When you applied it the other way:
fflat1[1, 0.1, cout0L]
you did provide exactly three arguments:
Sequence[1, 0.1, cout0L]
(* Sequence[1, 0.1, {4., 4., 4., 4.}] *)
but the last argument was itself a list. So, with the argument constraint satisfied, the function was evaluated to be the first item in the third argument, which is 4..