In indirect indexed addressing the memory location in the instruction (e.g. TAB_VEC in your code) must be a zero page location where a 16 bit address is stored. The processor reads this address and adds the Y register to it to identify the actual address of the data to be accessed.
In your code TAB_VEC assembles to be the address of the start of your data table rather than the address of a zero page pointer to the data. In fact if you had written LDA TAB_VEC,Y (e.g. indexed addressing) then it would have worked.
I've adjusted to the code to make it use indirect indexed addressing and indicated a couple of other small things (like not putting the program itself on zero page). Here is the reworked source.
Code:
.ORG $00
; TAB_VEC will be a 16 bit pointer to where the data actually
; is held
TAB_VEC .DS 2
; We'll move the code to a more reasonable starting address
.ORG $200
.START $200
LDA #<DATA ;Point TAB_VEC at the test data
LDX #>DATA
STA TAB_VEC+0
STX TAB_VEC+1
CLD
LDY #0
LDA (TAB_VEC),Y
TAY
LDX #0
LOOP CLC ;<-- Not necessary ROR will set/clear C
LDA (TAB_VEC),Y
ROR
BCS NO_COUNT
INX
NO_COUNT:
DEY
BNE LOOP
TXA ;Leave result in A
;PHA
BRK ;Stop the emulator
; Place the test data somewhere else in the memory
.ORG $500
DATA: .byte 8
.byte 1
.byte 2
.byte 3
.byte 4
.byte 5
.byte 6
.byte 7
.byte 8