How do you define a single operation (i.e. opcode) is, when telling if an instruction has multiple operation (i.e. opcodes)?
The definitions and your expectations are not quite correct. "Opcode" is used for indicating visible instructions, not hidden operations like micro-ops, and "instruction" should only refer to user-exposed operations. An operation may be simple or complex, depending on how you refer to it, like if you want to address the whole operation itself, or each lower level operation used to achieved that big thing. It's just like when you do a division, it can be called a single operation. But division can also be subdivided into a series of subtractions/multiplications, i.e. multiple operations.
In VLIW architectures, a single instruction is still 1 instruction. However, instructions will be grouped together as a batch. For example, a batch in Itanium architecture contains 3 instructions that will be run at the same time. Of course each instruction must have its own opcode, and those opcodes are available to the programmer to use. Moreover those instructions are independent of the others, unlike micro-ops which jointly represents an operation of some higher level instruction. For example in some architecture you may have 2 additions along with a multiplication and a bitwise xor of different things in a batch that doesn't relate to each other.
On the contrary, a CISC instruction is only one instruction that does a single operation, and has one opcode. Prior generations of CISC CPUs execute each instruction directly, so it's really a single unbreakable instruction. However in modern processors, complex "operations" will be divided into multiple simpler operations that can be done in shorter clock cycles. Those micro-ops are not visible to outsiders, so you can't call them multiple opcodes. To users, it's still a single instruction. You will probably never know which micro-ops Intel or AMD is using under the hood.
CISC and VLIW, one has a single instruction with a single opcode running at a time (excluding superscalar and out-of-order execution), one executes multiple instructions at a time, so how are they the same concept? You should view on top of the instruction set or at least the same level. Comparing a thing used internally in a CPU with a thing on the instruction set above the CPU is meaningless.